Методы и этапы решения экономических задач на компьютере
Имея алгоритм решения задачи можно переходить к его записи на языке программирования. Один и тот же алгоритм может быть реализован на различных языках. Выбор языка программирования, кодирование на нем, уточнение в процессе написания программ способов организации данных – это отдельная, самостоятельная и достаточно сложная задача.
Существует несколько подходов к классификации алгоритмических языков. Первая из них отталкивается от уровня языка. Чем он выше – тем ближе алгоритмический язык к живому человеческому, как правило, английскому языку. Чем ниже уровень языка – тем он ближе к тому, что используется для кодирования команд при аппаратной реализации вычислительного устройства.
Здесь определяющим является тип решаемой задачи. Для сложных задач, оперирующих достаточно абстрактными понятиями, следует выбирать языки высокого уровня. Экономические задачи, как правило, относятся к этой категории. Для задач, тяготеющих к реализации алгоритмов управления конкретными устройствами (так называемое «приборное программирование») выбирают языки более низкого уровня.
Большое значение имеет тип решаемой задачи. Представляется совершенно естественным, что при создании программного продукта для работы, например, с базами данных следует выбирать специализированный язык высокого уровня, предназначенный именно для этих целей. Разработка интеллектуальных информационных систем потребует применить языки, поддерживающие логическое или функциональное программирование. Писать программные приложения для работы в сети Интернет следует на языке, подходящем для этих целей.
После выбора языка для создания программного продукта, производится непосредственно кодирование алгоритмов. Сначала определяются переменные - именованные области памяти, по имени которых можно получить доступ к данным. Далее программисты описывают разработанные ранее алгоритмы с помощью выбранного языка программирования в соответствии с диктуемыми им правилами.
Важными моментом является то, что при написании следует уделять повышенное внимание комментариям к программе на «человеческом» языке, разъясняющим смысл написанного кода. Это позволяет лучше понять написанное другому программисту и, даже, быстрее вспомнить его автору программы через некоторое время.
В результате получаются текстовые исходные файлы.
Для того, чтобы программа, написанная на языке высокого уровня могла бы быть исполнена, текст ее, необходимо подвергнуть трансляции – переводу ее конструкций в вид, позволяющий исполнять их на компьютере. Он осуществляется с помощью специализированных программ – трансляторов.
Существует два подхода в трансляции:
– перевод отдельного оператора программы и немедленное ее исполнение программой-интерпретатором, что называется интерпретацией;
- перевод всей программу полностью в исполняемый код, после чего становится возможным ее выполнение программой компилятором.
Для одного и того же языка программирования могут быть написаны как интерпретаторы, так и компиляторы. Обычно считается, что интерпретаторы несколько проще для создания, но программы с их помощью выполняются медленнее.
При компилировании исходная программа первоначально преобразуется в некую промежуточную форму, называемую объектнымкодом (объектным модулем). Затем производится компоновка программы - то есть увязка всех ее частей и получение исполняемого (загрузочного) модуля, пригодного для запуска на компьютере. Компоновка производится с помощью специальной программы, называемой компоновщиком.
Если в программе используются стандартные функции, например, sin, exp и т.д., соответствующие им программные модули выбираются из библиотеки используемой системы программирования и вставляются в объектный модуль при компоновке. Тогда же сам объектный модуль преобразуется в соответствии с реальными адресами основной памяти, куда и будет размещаться программа для выполнения.
Процесс компиляции состоит из двух основных этапов − анализа и синтеза (рис. 6.24). На первом этапе производится разбор исходного текстапрограммы. То есть распознаются отдельные конструкции алгоритмического языка, использованные в программе, затем создаются и заполняются таблицы идентификаторов (переменных). Результатом анализа становится некое внутреннее представление программы, понятное компилятору.
Далее, на этапе синтеза из этого внутреннего представления программы и информации из таблицы идентификаторов, генерируется результирующая объектная программа.
Компилятор производит анализ исходного текста программы на наличие синтаксических ошибок. При их обнаружении он выдает соответствующую информацию о допущенных ошибках.
Процесс компиляции состоит из следующих основных этапов
Рис. 6.24. Схема компиляция программ
Лексический анализ. Компилятор читает символы программы на исходном языке и строит из них слова (лексемы) исходного алгоритмического языка. В результате его работы получается информация пригодная для синтаксического разбора.
Синтаксический разбор − в тексте исходной программы выделяются синтаксические конструкции, и проверяется синтаксическая правильность программы (отсутствие синтаксических ошибок).
Семантический анализ − проверяется текст исходной программы с точки зрения семантики (смысла) входного языка.
Подготовка к генерации кода – выполняются некие предварительные действия, такие как - идентификация элементов языка, распределение памяти и т.п.
Генерация кода – на этом этапе порождается текст результирующей программы.
На рис.6.27 показаны также таблицы идентификаторов, в которых специальным образом организованные наборы данных, хранящие информацию об элементах исходной программы. Содержимое таблицы идентификаторов используется для порождения текста результирующей программы. В процессе компиляции нужно хранить информацию о переменных, константах, функциях и т.п. Конкретный состав таблицы идентификаторов зависит от используемого входного языка программирования.
Порядок выполнения фаз компиляции различен в разных версиях компиляторов. В одних компиляторах просмотр текста исходной программы сопровождается выполнением всех фаз компиляции и получением результата − объектного кода. В других − над исходным текстом выполняются только некоторые фазы компиляции, и получается не конечный результат, а набор некоторых промежуточных данных, которые снова подвергаются обработке.
Интерпретатор- это программа, которая воспринимает текст исполняемой программы на исходном высокого языке уровня и сразу же выполняет её. Следует отметить, что не все языки программирования это допускают. В интерпретаторах отсутствует оптимизация, поэтому выполнение программы менее эффективно, чем с помощью аналогичного компилятора и, следовательно, они уступают компиляторам в производительности.
Преимуществом интерпретаторов является независимость выполнения программы от архитектуры вычислительной системы. При переходе на другую архитектуру при использовании компилятора требуется откомпилировать программу заново, т.к. объектный код всегда ориентируется на определенную архитектуру.
Многие языки программирования, которые используются в сети Интернет, предусматривают механизм интерпретации исходного текста программы вместо компиляции. Например, HTML (Hypertext Markup Language) язык описания гипертекста. положен в основу функционирования большинства структур сети Интернет. Языки Java и Java Script сочетают функции компиляции и интерпретации. На первом этапе исходная программа в них компилируется в некоторый двоичный код, который является промежуточным и не зависит от архитектуры целевого компьютера. Этот код передается по сети и выполняется принимающим компьютером в виде интерпретации.
Тестирование и отладка программ
Основная цель тестирования – проверить, отвечает ли разработанная система исходным спецификациям. Разработку тестовых данных и программы испытаний рекомендуется выполнять параллельно с этапами проектирования и программирования.
Важнейший этап в технологии создания программного продукта – это отладка. Ее цель в проверке синтаксической и логической правильности программы, в определении того, что она нормально функционирует на всем требуемом диапазоне входных данных. Во время отладки обнаруживают, локализуют и устраняют имеющиеся в программе ошибки.
На начальном этапе отладки выявляются синтаксические ошибки. Транслятор проверяет правильность написания формальных конструкций, таких как соответствие количества открытых и закрытых скобок в тексте, правильность написания операторов языка программирования, правильность задания переменных в программе и тому подобное. Как правило, эти ошибки возникают из-за небрежности и невнимательности программистов. Указание на них выводятся в специальный файл листинга транслятора.
После устранения синтаксических ошибок приступают к основной части отладки. Чтобы понять, где возникла ошибка, необходимо знать текущие значения переменных и тот путь (ту ветвь алгоритма) по какому выполнялась программа. Искусство тестирования программ состоит в том, чтобы создать по возможности полную систему тестов, проверяющую все возможные ветви вычислений.
Существуют различные технологии отладки. Например, с использованием специализированных программ отладчиков, которые визуализируют результаты пошагового выполнения программы в различных режимах. То есть, можно проследить переменные при поочередном выполнении операторов или функций (модулей алгоритма). Отладчики дают возможность производить остановку выполнения на заданных строках исходного кода программы или при достижении определённого условия. Другой распространенный прием заключается в выводе текущего состояния переменных в критических точках программы.
Процесс отладки заключается в том, что производятся запуски программы на различных наборах тестовых данных. Программист, осуществляющий отладку, должен иметь контрольный результат (полученный заранее) для каждого набора тестовых данных и сверять с ним работу проверяемой программы.
В случае расхождения между контрольным и фактическим результатами, выясняют проблемный участок алгоритма и выявляют допущенные ошибки. Анализ результатов тестирования используется для подготовки предложений по совершенствованию и оптимизации программного продукта.
К сожалению, отладка не может гарантировать, что программа абсолютно корректна, даже если все тесты прошли успешно. Отладка может доказать некорректность программы, но она не может доказать ее правильности. Особенность отладки заключается еще и в том, что после исправления одиночной ошибки процесс тестирования начинается практически заново, так как требуется проверить работу ранее использованных тестов.
Очень часто отладчик, компоновщик, компилятор и редактор, предназначенный для ввода исходных текстов программ, объединяют в интегрированную среду программирования. Такой подход очень удобен, так как позволяет осуществлять весь цикл разработки программного модуля, от написания исходного текста до отладки.
Дата добавления: 2016-05-31; просмотров: 2234;