Skip to content

Introductory C++ course with a bit of advanced stuff

Notifications You must be signed in to change notification settings

ar1st0crat/CppCourse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Объектно-ориентированное программирование на С++

Вводный курс по C++ и ООП со вкраплениями нетривиальных вещей

План:

Темы и вопросы курса поясняются на примерах классов и интерфейсов проекта TaxiService. В лекциях потихоньку будет писаться эта система (впрочем, будет обозначен только каркас).

Данный проект можно рассматривать как "учебный стенд" с одним слоем упрощенной бизнес-логики для демонстрации основ ООП. Более продвинутые техники ООП рассматриваются в других курсах и на факультативных занятиях

Предметная область (domain) - служба такси.

Кратко:

  • КЛИЕНТ заказывает такси по телефону (СИСТЕМА добавляет информацию по КЛИЕНТУ, если он обращается впервые)
  • ОПЕРАТОР принимает звонок и формирует ЗАКАЗ, включая в него пожелания КЛИЕНТА (в виде ответов на определенный набор вопросов), пункт отправки и пункт назначения
  • СИСТЕМА анализирует данные предзаказа от ОПЕРАТОРА, находит подходящего ВОДИТЕЛЯ и МАШИНУ, окончательно формирует ЗАКАЗ и отсылает смс КЛИЕНТУ с номером заказа и информацией
  • ВОДИТЕЛЬ может отменить ЗАКАЗ (если КЛИЕНТ не явился); если КЛИЕНТ дважды игнорировал заказ, он добавляется в черный список
  • СИСТЕМА учитывает рейтинг ВОДИТЕЛЯ и данные об активности КЛИЕНТА
  • ОПЕРАТОР и ВОДИТЕЛЬ числятся сотрудниками службы, им начисляется зарплата по разным правилам
  • СИСТЕМА хранит (и может отображать) информацию о всех ВОДИТЕЛЯХ, МАШИНАХ, ЗАКАЗАХ, КЛИЕНТАХ, ОПЕРАТОРАХ
  • СИСТЕМА располагает некоторой ГЕОСЛУЖБОЙ, позволяющей конвертировать адрес объекта в геокоординаты и обратно, рассчитывать расстояние между объектами города, а также оптимальный маршрут (вы думаете, что будет код этого действа? наииивные... ))).

+

Демо-проект "Консольный блекджек" с дополнительными элементами:

  • с++14 (auto, unique_ptr, shared_ptr, move, lambdas)
  • автодокументация кода с doxygen
  • юнит-тесты google test
  • интеграционные тесты google mock
  • директивы препроцессора
  • файлы makefile

В репозитории хранится несколько релизных версий:

Версия 1

Вариант "Студенческий середнячок": модульная объектно-ориентированная декомпозиция, пара интерфейсов, обработка исключений, кое-какие возможности С++ новых стандартов, добавлены простейшие юнит-тесты.

Версия 2

Предыдущий вариант, но с добавлением умных указателей. Обязательно ознакомиться со статьей Эрба Саттера: GOTW #91 для понимания принципов ведения и передачи умных указателей в качестве параметров.

Версия 3

Более-менее взрослый вариант: архитектура MVP, паттерны State и Strategy, проект достаточно тестируемый и расширяемый, добавлены интеграционные тесты, некоторые решения относительно кода были приняты после написания тестов (TDD).

Ресурсы

UML-диаграммы рисованы в крутом и удобном онлайн-редакторе yuml.me

Книги по основам С++:

  • Роберт Лафоре "Объектно-ориентированное программирования в С++"
  • Стивен Прата "Язык программирования С++. Лекции и упражнения"
  • Бйорн Страуструп "Язык программирования С++"

Более продвинутые:

  • книги Скотта Майерса (все)
  • книги Эрба Саттера (все)
  • Андрей Александреску "Современное проектирование на С++. Обобщенное программирование и прикладные шаблоны программирования"