Project

General

Profile

Требования к организации и оформлению кода (C++)

1. Концептуальные требования

  1. Система классов программы должна быть осмысленной и отвечать парадигме объектно-ориентированного программирования.

  2. Методы не должны занимать более 15 строк. Если метод занимает большее количество строк, значит он выполняет несколько независимых операций и требует разделения на более мелкие методы.

  3. Категорически запрещается дублирование кода!

  4. Запрещается собственная реализация средств, имеющих аналоги в Qt или стандартной библиотеке C++. Во всех случаях, когда возможно использование библиотечных классов Qt, они должны быть использованы.

  5. Рекомендуется использовать шаблоны проектирования во всех случаях, когда это представляется уместным.

  6. Не допускается выполнять оптимизацию кода, ухудшающую его качество, если это не является действительно необходимым. В случае применения оптимизации, ее реализация должна быть скрыта внутри класса и снабжена максимально подробными комментариями.

  7. Все возможные ошибочные ситуации должны корректно обрабатываться. Сообщения об ошибках должны быть максимально информативными.

  8. Запрещается размещение в репозитории кода, содержащего предупреждения компилятора или компоновщика. В большинстве случаев такие предупреждения сигнализируют об ошибках в коде.

  9. Крайне нежелательно размещение в репозитории кода, приводящего к выводу предупреждений и ошибок времени выполнения. Захламленное окно "Application Output" в QtCreator значительно усложняет отладку.

2. Соглашения по именам

  1. Имена должны быть осмысленными словами (или словосочетаниями в значении соответствующей части речи) английского языка. Для локальных переменных допускается использование сокращённых имён (например, i) с сохранением общепринятого контекста (i только для управляющей переменной цикла).

  2. Имена классов, [перечисляемых типов, идентификаторов перечисляемых типов](http://ru.wikipedia.org/wiki/Перечисляемый_тип) — существительные или словосочетания в значении существительных: в нижнем регистре, первые буквы слов — в верхнем регистре, разделители слов не используются (ClientInfo).

  3. Имена полей и локальных переменных — существительные в нижнем регистре, первые буквы слов начиная со второго — в верхнем регистре, разделители слов не используются (fileSize).

  4. Имена методов — глаголы в нижнем регистре (либо словосочетания, отражающие действия), первые буквы слов начиная со второго — в верхнем регистре, разделители слов не используются (removeFile, getUserName).

  5. Имена констант — существительные или словосочетания в верхнем регистре, слова разделены подчёркиваниями (INVALID_RECORD_COLOR).

3. Соглашения по стилю кода

  1. Во всех случаях, когда возможно проинициализировать локальную переменную в месте её определения, это необходимо сделать именно там.

  2. Не злоупотребляйте локальными переменными.

4. Соглашения по работе с памятью

  1. Если объект можно создать на стеке, то его следует создавать именно на стеке.

5. Соглашения по компоновке и оформлению отдельных файлов

  1. Заголовочные файлы должны быть максимально "легкими", т.е. должны подключать минимально необходимый набор других заголовочных файлов. Подключение целых модулей(QtGui) запрещено, т.к. значительно замедляет время полной сборки на слабых машинах.

  2. В заголовочных файлах имена параметров в функциях и методах являются обязательными.

  3. Предпочтительный порядок директив #include для *.cpp файлов:

1) Взаимосвязанный заголовочный файл

2) Заголовочные файлы из проекта

3) Системные заголовочные файлы

Пример файла mainwindow.cpp с предложенным порядком директив:

<code class="cpp">
#include "mainwindow.h"
#include "mywidget.h"
#include <QLabel>
  1. Наличие документационных комментариев для всех элементов программы обязательно.

  2. Документационный комментарий к методу помещается в том файле (.cpp или .h), где располагается его реализация. Не следует помещать комментарий одновременно в обоих файлах .h и .cpp.

  3. Для однострочных документационных комментариев используется только стиль //!

  4. Многострочные документационные комментарии оформляются в следующем стиле:

<code class="cpp">
/*!
  Comment here width 2 symbols indentation
*/
  1. Запрещается использовать документационные комментарии в стиле Java /** */

  2. В конце файлов с исходными кодами должна быть одна и только одна пустая строка.