Coder Social home page Coder Social logo

ggljgg / cppcourse Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ar1st0crat/cppcourse

0.0 1.0 0.0 6.92 MB

Introductory C++ course with a bit of advanced stuff

HTML 76.14% CSS 1.93% JavaScript 3.37% C++ 18.44% C 0.02% Makefile 0.03% Objective-C 0.06%

cppcourse's Introduction

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

Вводный курс по 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

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

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

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

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.