
- •Технология программирования
- •Содержание
- •1. Курсовой проект по технологии программирования
- •1.1. Цели и задачи дисциплины
- •1.2. Тематика курсовых проектов
- •1.3. Сроки выполнения отдельных этапов
- •1.4. Порядок защиты курсового проекта
- •2. Содержание пояснительной записки
- •3. Разработка технического задания
- •3.1. Соглашение между заказчиком и исполнителем
- •3.2. Правила оформления технического задания
- •4. Анализ и методы решения задачи
- •5. Анализ потоков данных. Организация структур данных программы
- •5.1. Диаграммы потоков данных
- •5.2. Представление потоков данных
- •5.3. Структуры данных
- •5.4. Диаграмма Джексона
- •6. Разработка структуры программы
- •6.1. Декомпозиция программной системы
- •6.2. Методы проектирования
- •6.3. Модульное программирование
- •6.4. Драйвера и заглушки
- •Разработка алгоритмов решения задачи
- •7.1. Описание алгоритмов
- •7.2. Методы разработки алгоритмов
- •8. Разработка пользовательского интерфейса
- •9. Текст программы
- •9.1. Структура листинга
- •9.2. Количество операторов в строке
- •9.3. Отступы
- •9.4. Операторные скобки
- •9.5. Пробелы
- •9.6. Пустые строки
- •9.7. Имена
- •9.8. Комментарии
- •10. Тестирование и отладка программы
- •11. Разработка программных документов
- •11.1. Единая система программной документации
- •11.2. Руководство пользователя
- •11.3. Руководство системного администратора
- •12. Требования по оформлению пояснительной записки
- •Библиографический список
- •Приложения
- •4. Требования к программной документации
- •Федеральное агентство по образованию рф Омский государственный технический университет Кафедра «Автоматизированные системы обработки информации и управления»
- •Пояснительная записка к курсовому проекту на тему: Система учета текущей успеваемости студентов
9. Текст программы
9.1. Структура листинга
Основная часть документа должна состоять из текстов одного ила нескольких разделов, которым даны наименования. Каждый из этих разделов реализуется одним из типов символической записи, например:
символическая запись на исходном языке;
символическая запись на промежуточных языках;
символическое представление машинных кодов и т. п.
В символическую запись разделов рекомендуется включать комментарии, которые могут отражать, например, функциональное назначение, структуру.
Одним из важнейших факторов, влияющих на способность программы к развитию, является ее понимаемость. Одним из существенных факторов понимаемости программы, в свою очередь, является информативность исходного текста. Если исходный текст не является хорошо читаемым, т. е. написан без соблюдения определенного стиля и системы и представляет собой «мешанину» операторов и знаков препинания, то вносить изменения в него очень сложно даже автору. Такая программа, безусловно, не является информативной. Сложности модификации значительно возрастают по прошествии времени и при необходимости работать с чужой программой. Рассмотрим ряд требований и рекомендаций, позволяющих выработать хороший стиль оформления программ, повышающий ее информативность. Изложение будем вести на примере языка C/C++, хотя все, сказанное ниже, относится к любому алгоритмическому языку.
9.2. Количество операторов в строке
Для улучшения читаемости исходного текста программы рекомендуется писать не более одного оператора в строке, что вызвано особенностями человеческого восприятия текста. Кроме того, это облегчает пошаговую отладку в символьных отладчиках.
Не следует опасаться того, что программа слишком вырастет в длину, т. к. реальные программы и без того настолько длинны, что несколько «лишних» страниц (или даже десятков страниц) не меняют общую ситуацию. Выигрыш же в понимаемости с избытком покрывает увеличение длины.
Неправильно |
Правильно |
int *ptr; ptr = new int [100]; ptr[0] = 0; |
int *ptr;
ptr = new int [100]; ptr[0] = 0; |
Два оператора в строке вполне допустимы, если второй подчинен первому, причем является единственным подчиненным, например:
for( i=0; i < size; i++ ) m[i] = 0;
Использование двух и более операторов в строке не только допустимо, но и желательно, если это позволяет подчеркнуть некую систему в локальной последовательности операторов, например:
x1 = Tr1[0]; y1 = Tr1[1]; z1 = Tr1[2];
x2 = Tr2[0]; y2 = Tr2[1]; z2 = Tr2[2];
x3 = Tr3[0]; y3 = Tr3[1]; z3 = Tr3[2];
9.3. Отступы
Правильное использование отступов являются ключевым методом обеспечения читаемости. Идея состоит в том, что отступы зрительно показывают подчиненность (иерархию) операторов. При этом директивы препроцессора (#include, #define и т.д.), описания классов, структур, типов, глобальных данных и определения функций всегда имеют наивысший приоритет, т. е. начинаются с крайней левой позиции, например:
#include <stdio.h>
#define NAME_SIZE 256
int main()
{
...
}
Основные правила использования отступов таковы.
Правило 1. Операторы одного уровня иерархии должны иметь равный отступ:
Неправильно |
Правильно |
printf( "Enter dimension: " ); scanf( "%d", &dim ); ptr = new int [dim]; ptr[0] = 0; |
printf( "Enter dimension: " ); scanf( "%d", &dim ); ptr = new int [dim]; ptr[0] = 0; |
Правило 2. Подчиненные операторы должны быть сдвинуты вправо по отношению к управляющему оператору, образуя следующий уровень иерархии:
Неправильно |
Правильно |
if( f == NULL ) printf( "No file\n" ); else printf( "Start..\n" ); |
if( f == NULL ) printf( "No file\n" ); else printf( "Start..\n" ); |
Правило 3. Размер сдвига должен быть постоянным:
Неправильно |
Правильно |
if( ptr == NULL ) return -1; for( i=0; i<dim; i++ ) ptr[i] = i; |
if( ptr == NULL ) return -1; for( i=0; i<dim; i++ ) ptr[i] = i; |
Размер сдвига не должен быть ни слишком мал, ни слишком велик. Оптимальная величина составляет 2-5 пробелов. Наиболее часто для сдвигов используют табуляцию, устанавливая при этом для нее желаемый шаг. Последняя возможность поддерживается большинством интегрированных сред разработчика.