Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Комментарии, пустые строки и пробелы
Неопытные программисты не пишут комментарии для экономии времени. Однако сам автор программы на удивление быстро забывает многие ее детали. Поэтому при отсутствии или недостатке комментариев в написанной программе дальнейшая работа с ней значительно затрудняется. Дополнительные расходы времени при этом могут многократно превысить время, сэкономленное на комментариях. Лучше всего писать комментарии вместе с программой, поскольку именно тогда программист сосредоточен на ней в наибольшей степени, и ему не приходится вспоминать забытые детали. Существует три типа комментариев: вводные, оглавления и пояснительные. Вводные комментарии поясняют назначение программы или модуля. Они могут включать указания по использованию, перечисление файлов, связанных с программой или модулем, названия применяемых методов, требуемый объем памяти, сведения об авторе, дату создания и другие сведения. В комментариях к подпрограмме обязательно специфицируются ее параметры и ограничения на их возможные значения. В данном пособии вводные комментарии практически отсутствуют, поскольку их роль играют предварительные пояснения к программам и подпрограммам. Комментарии оглавления полезны в программах, имеющих много подпрограмм. Обычно они указывают названия, размещение и назначение используемых подпрограмм и других программных единиц. Пояснительные комментарии описывают словами логику программы. При нисходящем проектировании программы уточняемые фразы предыдущего уровня детализации обычно имеют вид приказов или команд на выполнение некоторых действий. Они часто записываются в виде комментариев перед частями программы, уточняющими эти команды {команды-комментарии). Как правило, комментарий должен пояснять цель или предназначение некоторой группы операторов, а не описывать заданные ими действия. Естественно, комментарии должны соответствовать содержанию фрагмента программы и изменяться при модификации фрагмента. В операторах if-then-else полезны комментарии после слова else, особенно если оно находится далеко от соответствующего слова if. В таком комментарии записывается отрицание условия, указанного после if. После оператора цикла while полезно записать комментарий с отрицанием условия продолжения цикла. Часто это дает подсказку о состоянии памяти по завершении цикла. Пропуск строк обычно применяется для отделения друг от друга групп логически связанных между собой операторов или определений, в частности, подпрограмм. Иногда пустыми строками выделяют комментарии. Пробелы также облегчают чтение программы. Ими часто выделяют знаки операций в выражениях, знаки присваивания, элементы в списках имен, констант и т.п. 2. Программа написана – что дальше? Отлаженная программа – это программа, для которой пока еще не найдены такие условия, в которых она окажется неработоспособной. У. Огден Мы строим системы так же, как братья Райт строили свои самолеты: создаем всю систему целиком, запускаем ее – пусть она развалится! – и начинаем все сначала. Р. Грэхем 2.1. " Правильная программа" и ошибки Термин " правильная программа" можно понимать по-разному. Выделим следующие уровни правильности программы: 1) не содержит синтаксических ошибок; 2) выдает правильные результаты для некоторых экземпляров входных данных; 3) выдает правильные результаты для всех возможных входных данных, удовлетворяющих спецификации задачи; 4) обеспечивает правильный ответ для любых входных данных, даже содержащих произвольные ошибки. Очевидно, первый уровень неприемлем. Второй обычно достигается новичками на занятиях по программированию, когда они впервые собираются сдавать свою программу преподавателю. Третьего уровня можно достичь после тщательной и многократной проверки программы на специально подобранных данных и исправления всех выявленных при этом ошибок. Четвертый уровень – это то, к чему иногда, хотя и не всегда, нужно стремиться в реальных программах, но чего достичь практически невозможно. Правильность реальных приложений обычно находится между третьим и четвертым уровнем, хотя бывает, что и третий уровень не обеспечен. С четвертым уровнем правильности связано понятие живучести. Живучая программа сохраняет свою работоспособность, несмотря на ошибки во входных данных. Уровень правильности программы весьма желательно определять при постановке задачи и фиксировать в ее спецификации, иначе заказчик может долго предъявлять претензии, повышая уровень своих требований. Очевидно, чем выше уровень правильности, тем больше усилий нужно затратить на проектирование, разработку, отладку и испытание программы. Человеку свойственно ошибаться. Ошибки могут происходить на всех стадиях создания программы. Но сейчас рассмотрим ошибки, возникающие при кодировании и наборе текста программы. Написанная и набранная на клавиатуре программа, даже небольшая, практически всегда содержит ошибки, но опытные программисты, в отличие от новичков, умеют находить и устранять собственные ошибки. Отчасти этот опыт состоит в знании наиболее вероятных ошибок. Рассмотрим самые типичные ошибки, разбив их на четыре группы. Некоторые ошибки связаны с языковыми средствами, представленными в следующих главах. Синтаксические ошибки связаны с нарушением правил языка. О них сообщает компилятор при попытке трансляции программы. Чаще всего встречаются следующие: § ошибка набора, например, буква " о" вместо нуля, переставлены или пропущены символы в имени или ключевом слове; § пропущен разделитель (", ", ": ", "; " и т.п.); § ошибка в записи знаков операций, особенно сравнений; § не определены имена (переменных, констант, типов или подпрограмм) или не указано использование другой программной единицы; § неправильно записан оператор, например, в языке Паскаль знак "; " перед словом else; § несбалансированы или отсутствуют необходимые пары скобок в выражениях; § отсутствует баланс операторных скобок begin-end. Иногда синтаксическая ошибка находится не там, где указывает компилятор, например, ошибка допущена при определении имени, а указана в месте его использования. После исправления синтаксических ошибок программа запускается на выполнение, и появляются признаки более серьезных и тонких семантических ошибок, подавляющее большинство которых компилятор обнаружить не может. Вот наиболее типичные и легко исправимые (но не всегда легко выявляемые) семантические ошибки: § пропущен оператор или группа операторов; § не инициализированы переменные; § неправильно записаны условия в операторах ветвления и циклов, например, не учтен приоритет операций и не хватает скобок; § не инициализированы переменные, обрабатываемые в цикле; § неправильно определен диапазон изменения счетчика или параметра цикла; § значения индексов массива выходят за допустимые пределы; § неправильно использованы вложенные операторы ветвления или цикла; § указаны непредусмотренные изменения параметров-переменных; § перед делением отсутствует проверка, не равен ли делитель 0; § перед чтением файла нет проверки, можно ли его читать; § неверно использованы оператор или подпрограмма из-за незнания, как в действительности они выполняются, например, оператор for в Паскале или подпрограммы ввода-вывода; § не соблюдается соответствие между аргументами в вызове подпрограммы и ее параметрами по количеству и порядку записи (простое несоответствие типов обычно распознает транслятор); § неправильно обрабатывается окончание последовательности входных данных. Хуже, если исправление ошибки требует более серьезных изменений программы. Вот некоторые ошибки такого рода: § неправильно определен диапазон возможных значений входных и других данных; § не предусмотрены особые и пограничные ситуации, связанные с вводом и выводом данных; § неправильно обрабатываются ошибки во входных данных; § сочетания значений переменных, например флажков, обрабатываются с ошибками. Наконец, программа может работать правильно, но не соответствовать спецификации, т.е. решать не ту задачу. Ошибки такого рода могут потребовать полной замены отдельных программных единиц, изменений в спецификации и перепроектирования программы в целом: § использован неподходящий алгоритм, из-за которого, например, программа работает слишком медленно. При этом фактически сужается область ее применимости; § исчерпывается программный стек или свободная память. Это также сужает область применимости; § работа программы не соответствует документации; § есть ошибки в постановке задачи и спецификациях задачи. Итак, лучше не ошибаться, но, поскольку это невозможно, придется искать и устранять ошибки, т.е. отлаживать программу.
|