Основные виды языков программирования

Языки прграммирования

Отладка

Классификация ошибок в программе

Синтаксическая ошибка

Связана с нарушением синтаксических правил.

Ошибка времени выполнения (run-time error)

происходит при выполнении (синтаксически верной) программы, когда она производит какое-либо недопустимое действие (деление на ноль и др.).

Логическая ошибка

Ошибка при разработке и написании алгоритма. При этом программа не содержит ни синтаксических ошибок, ни ошибок времени выполнения, но делает не то, что хотел автор программы.

Отладка (Debugging) это процесс локализации и исправления ошибок, выявленных во время тестирования программы.

Разновидности отладки:

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

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

Основные функции отладчика

Трассировка – пошаговое выполнение программы. Шагу соответствует одна строка исходного текста (в которой может быть более одного оператора).

Режим "без трассы подпрограмм" – пошаговое выполнение программы, при котором вызов подпрограммы отрабатывается как один оператор.

Режим "трасса подпрограмм" – пошаговое выполнение программы, при котором трасса включает все операторы подпрограмм.

Точка останова (breakpoint) приостанавливает выполнение программы. Может быть установлена только на выполняемом операторе (не на комментарии и др.).

Возможен просмотр значений переменных при пошаговом выполнении программы.

Программы на традиционных языках программирования, таких как Си, Паскаль, Java и т.п. состоят их последовательности модификаций значений некоторого набора переменных, который называется состоянием. Если не рассматривать операции ввода-вывода, а также не учитывать того факта, что программа может работать непрерывно (т.е. без остановок, как в случае серверных программ), можно сделать следующую абстракцию. До начала выполнения программы состояние имеет некоторое начальное значение σ0, в котором представлены входные значения программы. После завершения программы состояние имеет новое значение σ', включающее в себя то, что можно рассматривать как «результат» работы программы. Во время исполнения каждая команда изменяет состояние; следовательно, состояние проходит через некоторую конечную последовательность значений:

Состояние модифицируется с помощью команд присваивания, записываемых в виде v = E или v:= E, где v - переменная, а Е - некоторое выражение. Эти команды следуют одна за другой; операторы, if и while, позволяют изменить порядок выполнения этих команд в зависимости от текущего значения состояния. Такой стиль программирования называют императивным или процедурным.

Функциональное программирование представляет парадигму, отличную от рассмотренной модели. Функциональная программа представляет собой некоторое выражение (в математическом смысле); выполнение программы означает вычисление значения этого выражения. Считая, что результат работы императивной программы полностью и однозначно определен ее входом, можно сказать, что финальное состояние (или любое промежуточное) представляет собой некоторую функцию (в математическом смысле) от начального состояния, т.е.. В функционально программировании используется именно такая точка зрения: программа представляет собой выражение, соответствующее функции f. Функциональные языки программирования поддерживают построение таких выражений.

При сравнении функционального и императивного подхода к программированию можно отметить следующие свойства функциональных программ:

• Функциональные программы не используют переменные в том смысле, в котором они используются в императивном программировании. В функциональных программах не используется оператор присваивания.

• Как следствие из предыдущего пункта, в функциональных программах нет циклов.

• Выполнение последовательности команд в функциональной программе бессмысленно, поскольку одна команда не может повлиять на выполнение следующей.

• Функции можно передавать в другие функции в качестве аргументов и возвращать в качестве результата, и проводить вычисления, результатом которых будет функция.

• Вместо циклов функциональные программы широко используют рекурсивные функции.

Многие характеристики императивных языков программирования являются результатом абстрагирования от машинных кодов к языкам ассемблера, а затем к языкам типа Фортран и т.д. Более привлекателен подход, при котором языки программирования появляются как абстрактные системы для записи алгоритмов, а затем происходит их перевод на императивный язык компьютера.

Функциональный подход имеет ряд преимуществ перед императивным. Функциональные программы более непосредственно соответствуют математическим объектам, и следовательно, позволяют проводить строгие рассуждения. Установить значение императивной программы, т.е. той функции, вычисление которой она реализует, в общем случае довольно трудно. Значение функциональной программы может быть выведено практически непосредственно.

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

• Их значение может зависеть не только от аргументов;

• Результатом их выполнения могут быть разнообразные побочные
эффекты
(например, изменение значений глобальных переменных)

• Два вызова одной и той же функции с одними и теми же аргумен
тами могут привести к различным результатам.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: