Требования к выполнению заданий

  1. Каждая программа должна быть написана полностью самостоятельно.
  2. Задания должны быть написаны на С++, желательно на последнем стандарте.
  3. Программы должны быть представлены в виде исходных текстов.
  4. Программа должна быть хорошо протестирована до сдачи.
  5. Код программы должен компилироваться и исполняться без ошибок и предупреждений warning. Флаги компиляции для gcc и clang: -Wall -Wextra -Werror
  6. Исходный код должен быть оформлен в соответствии с общепринятыми конвенциями оформления. Для языка C/С++ это стандарт Google C++ Style Guide.
  7. Имена переменных следует выбирать в соответствии со смыслом (назначением), а не типом переменной.
  8. Имена переменных должны отражать суть данных, которые она содержит. Использование однобуквенных неясных названий для переменных считается сильным недостатком, кроме индексов, координат и других принятых математических обозначений.
  9. Имя метода или функции должно начинаться с глагола, отражающего суть выполняемого действия.
  10. Исходный код должен быть понятен без сопутствующих комментариев.
  11. Логика программ не должна быть смешана с логикой ввода данных. По умолчанию, если не оговорено иное, лабораторные не предполагают ввода данных через консоль, поэтому подтверждение работоспособности программы показывается модульными тестами.
  12. Время жизни переменной, объекта должно быть максимально коротким.
  13. Запрещено использовать не примитивные типы для значений аргументов функции или метода по умолчанию, если того не требует условие задания.
  14. Запрещено использование магических констант. Если необходимо, они должны быть именованными.
  15. Запрещено использовать метки goto.
  16. Запрещено создание громоздких функций и методов размера более 30 строк. Такие конструкции следует разбивать на мелкие и понятные функции и методы.
  17. Нельзя использовать глобальные переменные, только локальные автоматические, если это не требуется явно по заданию.
  18. Конструктор должен устанавливать инвариант класса.
  19. Запрещено использовать жирные интерфейсы.
  20. Запрещено использовать иерархии классов глубины больше 3.
  21. Наличие нескольких классов в одном файле считается сильным недостатком.
  22. К задание в лабораторной работе могут быть добавлены дополнительные ограничения для проверки конкретных навыков. Например, может быть ограничено использование циклов, рекурсии, условных операторов if, switch, классов или функций, глобальных переменных, замыканий, лямбд.

Приложение. Стиль оформления программа

Далее описаны основные пункты из Google C++ Style Guide.

  1. Используйте пробелы для отступов. По 2 пробела для одного уровня.
  2. Имена переменных задаются в snake_case. Например, char* table_name.
  3. Имена функций задаются в UpperCamelCase. Например, AddTableEntry().
  4. Имена классов и структур задаются в UpperCamelCase. Например, class IntersectionService.
  5. Макросы (константы) задаются в CAPS_SNAKE_CASE.
  6. Фигурная скобка начала блока функции, структуры, класс, операторов if/else/for/while и других ставится на той же строке, где и имя функции, класса, структуры, операторов, после пробела. Фигурная скобка закрывающая блок ставится всегда на новой строке.
  7. Каждая переменные объявляется на новой строке. Не допускается сжатое объявление нескольких переменных в одной строке.
  8. Между операторами и операндами ставится пробел.
  9. При использовании операторов if/else/for/while всегда ставятся фигурные скобки для обозначения блоков {}.