1.1. Понятие жизненного цикла программных изделий1.Принципы разработки программ.
В основе деятельности по созданию и использованию программного обеспечения лежит понятие жизненного цикла, который является моделью создания и использования программного обеспечения, отражающей его различные состояния, начиная с момента возникновения необходимости в данном программном изделии и заканчивая моментом его полного выхода из употребления у пользователей. Для каждого конкретного программного изделия количество, состав и последовательность этапов жизненного цикла определяется на ранних стадиях его создания. Непосредственный выбор определяется различными ограничениями и особенностями предметной области. В рамках настоящих лабораторных работ выделяются:
- этап постановки задачи, на котором необходимо сформировать представление о том, в создании какого вычислительного процесса, с использованием каких данных состоит цель работы;
- этап проектирования, в рамках которого необходимо принять решение о составе данных и их типах и представить вычислительный процесс в терминах граф-схемы алгоритма;
- этап кодирования, на котором необходимо отобразить данные в соответствующих разделах программы и представить алгоритм в виде операторов языка программирования;
- этап тестирования и отладки, в рамках которого предполагается использование средств отладки программной среды для локализации ошибок в коде.
Под алгоритмом, как правило, понимается точное предписание, которое задает вычислительный процесс, начинающийся из некоторой совокупности исходных данных и направленный на получение полностью определяемого исходными данными результата. Обосновывать принципы алгоритмизации целесообразно в рамках анализа свойств алгоритмов. Выделяют следующие свойства алгоритмов.
1. Дискретность √ свойство, отражающее выполнение вычислительного процесса, задаваемого алгоритмом по шагам.
2. Детерминированность √ свойство, означающее, что на каждом шаге любой полученный результат определяется результатами, полученными на предшествующих шагах.
3. Элементарность √ свойство, согласно которому действие, которое выполняется на каждом шаге должно быть простым.
4. Направленность √ свойство, обуславливающее необходимость указания, что является результатом того шага, на котором нельзя выполнить определенную в нем операцию.
5. Массовость √ свойство, согласно которому алгоритм может быть применен к любой совокупности из допустимого множества исходных данных.
Одной и той же задаче может соответствовать множество алгоритмов, поэтому, для обоснования выбора одного из них для решения конкретной задачи, применяют совокупность показателей, основными из которых являются следующие.
1. Временная сложность √ показатель, отражающий время выполнения алгоритма или количество шагов его выполнения.
2. Емкостная сложность √ показатель, по которому производят оценку количества данных, необходимых для выполнения алгоритма.
3. Сложность описания √ показатель, отражающий длину описания алгоритма, количество инструкций операторов.
Для представления алгоритма используют различные средства, в том числе граф-схемы алгоритмов, каждая из которых представляет собой граф. Понятие элементарного графа дополнено введением надстройки, которая задает вычисления, каждому из которых соответствует путь в этом графе и последовательность меток узлов, лежащих на этом пути. Узлы графа, с помощью введения типизации, интерпретируются как действия, а дуги задают порядок передачи управления. Для каждого алгоритма существует одна начальная дуга и одна или множество конечных. В табл.1 представлены типы узлов граф-схемы алгоритма в соответствии с ГОСТ 19.701-90 ╚Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения╩.
Таблица 1
символ |
название |
интерпретация |
данные | данные, носитель данных не определён | |
процесс | функция обработки данных любого вида (выполнение определённой операции или группы операций, приводящие к изменению значения, формы или размещения информации или к определению, по которому из нескольких направлений потока следует двигаться) | |
предопределённый процесс | предопределённый процесс, состоящий из одной или нескольких операций или шагов, которые определены в другом месте(в подпрограмме, модуле) | |
подготовка | модификация команды или группы команд с целью воздействия на некоторую последующую функцию | |
решение | решение или функция переключательного типа, имеющая один вход и ряд альтернативных выходов, один и только один из которых может быть активизирован после вычисления условий, определённых внутри этого символа; соответствующие результаты вычислений могут быть записаны по соседству с линиями, отображающими эти пути | |
граница цикла | начало и конец цикла; обе части имеют один и тот же идентификатор; условия инициализации, приращения, завершения, и т.д. помещаются внутри символа в начале или в конце в зависимости от расположения операции, проверяющей условия | |
соединитель | выход в часть схемы и вход из другой части схемы; используется для обрыва линии и продолжении её в другом месте; соответствующие символы-соединители должны содержать одно и то же уникальное обозначение | |
терминатор | вход из внешний среды и выход во внешнюю среду(начало и конец программы) | |
_______________ | линия | поток данных или управления; для направлений справа -налево и снизу-вверх добавляются стрелки |
- - - - - - - - - - - - - - | пунктирная линия | используется для обведения аннотируемого участка |
- - - - - - - - - [ | комментарий | пояснительные записи и примечания |
______ . . . _____ | пропуск | пропуск символа или группы символов, в которых не определены ни тип ни число символов; используется только в символах линии или между ними; служит для отображения общих решений с неизвестным числом повторений. |
Приведем основные свойства граф-схем.
1. Графическое представление.
2. Поддержка описания управляющей части алгоритма.
3. Возможность реализации синтаксического контроля.
4. Возможность проверки управляющей части алгоритма.
5. Отсутствие возможности верификации информационной части.
Необходимо отметить, что по граф-схеме алгоритма можно произвести оценку таких характеристик алгоритма, как временная сложность и сложность описания, однако, возможность оценки емкостной сложности отсутствует. На рис. 1 представлен пример граф-схемы алгоритма.
Borland Pascal представляет собой интегрированную среду программирования. Термин ╚интегрированная╩ используется для указания того, что данная система организована как совокупность компонент, каждая из которых предназначена для решения отдельной задачи в рамках жизненного цикла программы. Такими компонентами являются: текстовый редактор, компилятор, загрузчик, исполняющая система и отладчик. Компоненте ╚отладчик╩ посвящен отдельный раздел, а в данном будут рассмотрены остальные компоненты, с помощью которых решаются две основные задачи: создание и редактирование кода и его компиляция и выполнение.
На рис.2 изображено главное окно системы. Управление поведением системы осуществляется посредством меню, активизация которого осуществляется мышью или функциональной клавишей <F10>. Команды главного меню являются составными, то есть активизация любой из них приводит к появлению подменю, которое содержит конкретизацию назначения команды главного меню.
рис 2. Главное окно среды Turbo Pascal.
Создание и редактирование текста программы
Для создания новой программы необходимо через пункт главного меню ╚File╩ получить и активизировать пункт ╚New╩ соответствующего ему подменю. При этом происходит активизация редактора, признаком которой является цветовое выделение рамки окна и наличие в нем курсора. Набранный текст программы содержится во временном файле, создаваемом системно, а для его сохранения на диске необходимо воспользоваться командой ╚Save╩ (<F2>). В появившимся в результате активизации этой команды окне необходимо указать имя и местоположение созданного файла. Содержимое ранее созданного файла с помощью команды ╚Open╩ подменю ╚File╩ можно открыть в окне текстового редактора для внесения изменений. При редактировании удобно пользоваться командами подменю ╚Edit╩ или ╚горячими клавишами╩, обеспечивающими удобство использования стандартных операций редактирования.
Компиляция и выполнение программы
Вся работа по созданию или редактированию файла в окне текстового редактора производится с временной копией файла. Для компиляции кода, который содержится в этой копии, используется команда ╚Compile╩ подменю ╚Compile╩ (<Alt>+<F9>). При этом в случае наличия в коде ошибок, произойдет активизация текстового редактора, и курсор будет установлен в позицию, в которой транслятор зафиксировал ошибку, а в верхней части окна будет содержаться сообщение об ошибке. В противном случае, в зависимости от настроек, система создаст временный исполняемый модуль и выдаст специальное окно, сигнализирующее об отсутствии синтаксических ошибок в коде. Для создания не временного исполняемого файла используется команда ╚Make╩ подменю ╚Compile╩. Запуск исполняемого файла осуществляется командой ╚Run╩ подменю ╚Run╩ или комбинацией клавиш <Сtrl>+<F9>. При этом, сначала транслятор производит контроль ошибок, в случае отсутствия которых компилятор создаст исполняемый модуль, запуск которого будет осуществлен исполняющей системой.