В конце файла собираются все функции и подробности низшего уровня.
Код читается слева направо и сверху вниз.
Законченные мысли отделяются пустыми строками.
Строки кода с тесной связью должны быть сжаты по вертикали.
Тесно связанные концепции не находятся в разных файлах.
Следует избегать запущенных переменных.
Читателю не нужно прыгать туда-сюда по исходным файлам и классам.
Переменные объявляются максимально близко к месту использования.
Переменные перечисляются в начале каждой функции.
Управляющие переменные циклов объявляются внутри конструкции циrла.
Переменные экземпляров объявляются в начале класса.
Если одна функция вызывает другую, то они располагаются вблизи друг друга по вертикали.
Вызывающая функция располагается над вызываемой.
Концептуально родственные фрагменты кода располагаются близко друг к другу по вертикали.
Важные концепции излагаются сначала с минимальным количеством второстепенных деталей.
Строки делать по возможности короткими.
Пробелы для визуального обозначения приоритета операторов.
Длинные списки – причина для разделения на классы.
Горизонтальное выравнивание не применяется.
Отступы выделяют области видимости.
Не применяются вырожденные области видимости.
Группа разработчиков согласует единый стиль форматирования.
Код продукта оформлен в едином стиле.
Внешний пользователь не в курсе деталей реализации.
Методы интерфейса устанавливают политику доступа к данным.
Классами предоставлены абстрактные интерфейсы, посредством которых пользователь оперирует с сущностью данных.
Пользователь не имеет представления о фактическом формате данных.
Объекты скрывают свои данные за абстракциями и предоставвляют функции, работающие с этими данными.
Структуры данных раскрывают свои данные и не имеют осмысленных функций.
Процедурный код (код, использующий структуры данных) позволяет легко добавлять новые функции без изменения существующих структур данных.
ООП-код упрощает добавление новых классов без изменения существующих функций.
Процедурный код усложняет добавление новых структур данных, так как требуется изменение всех функций.
ООП-код усложняет добавление новых функций, так как требуется изменение всех классов.
Данные необязательно представляются в виде объектов.
Закон Деметры – модуль не должен знать внутреннее устройство объектов, с которыми работает.
Метод f класса С должен ограничиваться вызовом методов следующих объектов: С; объекты, созданные f; объекты, переданные f в качестве аргумента; объекты, хранящиеся в переменной экземпляра С.
Метод не должен