Основные правила программирования

Если вы занимаетесь программированием, то на каком языке вы бы не писали - всегда есть общие идеи и концепции,следование которым облегчит работу. Вот мой взгляд на основные правила при программировании.

 

0. САМЫЙ главный приоритет при разработке любой программы – это сохранение способности к развитию и повторному использованию. На практике только повторное использование кода может выявить ошибки и улучшить структуру (например, появление старых данных, но уже «нового» типа). Хорошая программа модифицируется перманентно.

Возможность повторного использования должна облегчать модульная структура программы (инкапсуляция и интерфейсы). Например, главное преимущество ООП – это возможность:

а) безопасной (прежний не портится) модификации УЖЕ существующего кода,

б) возможность модификации и без исходного кода.

С другой стороны, связывание данных и процедур для их обработки неизбежно ухудшает модульность.

 

С этой точки зрения главные требования к языку программирования (или стилю, которого следует придерживаться) –

- хорошая читаемость;

- замкнутость (явность кода);

- быстрота компиляции проекта в целом, чтобы сразу увидеть результаты модификации.

 

1.Оформление отдельных функций.

- Пессимистическая точка зрения на входные переменные.

- bool тип функций с изначальным результатом FALSE.

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

- Желательность присваивания выходных переменных в самом конце, а в теле функции работа происходит с «внутренними копиями этих переменных», так чтобы вызывающая функция получила NIL в качестве результата, если в теле функции произошла ошибка.

- Широкое использование обработки исключений. Сообщения об ошибке должны однозначно указыват место в коде, где произошел сбой. Обычно, предполагают, что обработка исключений – это дело внешней, вызывающей функции. Однако для поддержки модульной структуры желательно обработать ошибку внутри.

- При ручном управлении памятью -- постоянное использования предварительного заполнения NULL.

 

2.Соглашения об именах переменных.и функций

- Все глобальные переменные имеют начало “Gl”.

- Следовать стандартным наименованиям функций: Free,Create,Init, Get, Set, Is и т.д.

 

3.Методы фиксации ошибок.

- Отладчик.

- Организация потока сообщений об ошибках. Разные типы ошибок – идентификаторы опасных ошибок.

- Использование trace файлов – чтобы грубо локализовать место краха.

- Инструменты контроля утечек памяти (при ручном управлении памятью).

- Assertions.

- Способ согласования версий dll: хранение SizeOf(UsedRecord) как поля в записи передаваемой на вход dll.

 

4. Пожалуй наиболее простой способ решить каким должен быть интерфейс, это "поиграться" с ним: написать примеры кода, который будет использовать этот модуль, до написания самого модуля. Эти "ненастоящие" примеры не пропадут, когда вы закончите разработку модуля. Вы можете просто переделать эти примеры в демо-программы, примеры для документации или использовать в качестве тестов для модуля. Ключевой принцип в том, чтобы писать код так, словно модуль уже существует, и подразумевая, что модуль имеет такой интерфейс, который наиболее удобен.