Рассмотренные способы записи алгоритма еще не делают алгоритм понятным ЭВМ. Они являются предварительным описанием будущей машинной программы. Только алгоритмические языки описывают алгоритм так, что он может непосредственно обрабатываться ЭВМ. Написанная на языке программирования программа вводится в ЭВМ, например, с клавиатуры и сохраняется на каком-либо машинном носителе, например, магнитном диске.
После разработки алгоритма и проверки правильности его работы наступает этап разработки программы. Программа представляет собой последовательность операторов языка программирования, записанную в соответствии со схемой алгоритма. Существует ряд методов программирования, ориентированных на получение надежных, пригодных для отладки, испытаний и сопровождения программ. К этим методам можно отнести:
1) программирование на языках высокого уровня, что позволяет разработчику абстрагироваться от особенностей используемой ЭВМ и оперировать абстрактными типами данных;
2) программирование с защитой от ошибок, то есть разработка программ, включающих дополнительные проверки входных и промежуточных данных на полноту, допустимость и правдоподобность получаемых значений;
3) структурное программирование, заключающееся в разработке алгоритмов и программ по правилам системного подхода.
Качество программы определяется набором требований, предъявляемых к программе, которые в зависимости от назначения программы могут меняться. Наиболее важными критериями качества программ являются: надежность программы, простота пользования, мобильность, удобство эксплуатации, эффективность, совместимость, стоимость, полная документируемость.
Надежность программы – это свойство программы выдавать правильные результаты при всех возможных и допустимых исходных данных. При наличии ошибочных исходных данных программа должна распознавать данную ситуацию и не приводить к фатальным последствиям.
Простота пользования программ стала в последнее время важнейшей характеристикой программы в результате широкого внедрения ПЭВМ в повседневную жизнь человека. Эта характеристика определяет наличие четко определенных условий и области применения данной программы ясно оговоренными ограничениями и пояснениями, облегчающими и ускоряющими использование программы, но исключающими ее неправильное применение. Программы, обладающие такой характеристикой, облегчают взаимодействие пользователя с ЭВМ.
Мобильность программы и удобство эксплуатации – свойства взаимосвязанные. Мобильность программы связана с возможностью переноса ее из одной среды функционирования в другую с минимальными затратами. Мобильность программы достигается за счет использования языков программирования высокого уровня и мобильных операционных систем, а также ориентации на распространенные технические средства ЭВМ. Однако выполнение требований мобильности приводит к снижению экономичности программы, которая характеризуется затратами процессорного времени и памяти ЭВМ.
Удобство эксплуатации означает, прежде всего, возможность дальнейшего улучшения программы без значительных переделок.
Эффективность программы можно оценить параметром, значение которого прямо пропорционально быстродействию и обратно пропорционально объему использования ресурсов ЭВМ. Ресурсы ЭВМ состоят из пяти компонент: процессорного времени, основной памяти, внешней памяти, устройств ввода-вывода и программного обеспечения.
Совместимость программы означает ее пригодность к выполнению на конкретной ЭВМ, оснащенной конкретной операционной системой. Например, в документации на программные продукты могут оговариваться тип используемого компьютера (например, PC/AT), тип процессора (80286, 80386), тип операционной системы (MS-DOS, Windows, OS/2, UNIX), версия операционной системы (MS-DOS 3.0, Windows 95), особые характеристики компьютера (минимальные тактовая частота процессора, объемы оперативной памяти и видеопамяти, разрешающая способность монитора), наличие дополнительных периферийных устройств ("мыши", джойстика, печатающего устройства, звукового адаптера и других).
Очевидно, что улучшение перечисленных характеристик неизбежно сказывается на стоимости программы. Поэтому должен достигаться компромисс между степенью улучшения какой-либо характеристики и увеличением стоимости программы.
Документируемость программы – это характеристика, связанная с сопровождающей ее информацией, в которой указываются назначение программы, порядок ее использования и адаптации к конкретным условиям эксплуатации. Современные программные средства имеют встроенные справочные подсистемы, работающие в диалоге с пользователем и заменяющие традиционные бумажные справочные документы.
Регламентирует процесс разработки компьютерных программ уже упомянутая ЕСПД, которая представляет собой комплекс взаимосвязанных государственных стандартов, определяющих общие положения, виды программ и программных документов, правила разработки, оформление программ, распространение документации, сопровождение программ независимо от их назначения и области использования. Введение стандартов в процесс создания программ улучшает технологию программирования и повышает качество программ.
Выбор языка программирования в значительной мере влияет на надежность работы программы и ее приспосабливаемость к отладке, испытаниям и сопровождению. Чем выше уровень языка программирования, тем меньше ошибок в разрабатываемых программах, тем легче понимать программы. Любая функция обработки данных на языке высокого уровня выражается меньшим числом операторов, чем на языке низкого уровня.
Программы на языке высокого уровня более надежны, так как выше степень автоматического обнаружения ошибок в процессе трансляции программы. Программа на языке высокого уровня отличается значительно большей наглядностью, которая обеспечивается соответствующим составом ключевых слов языка и возможностью модульного построения больших программ. Наглядность языка программирования полезна с нескольких точек зрения:
1) упрощается документирование программ;
2) в таких программах быстрее выявляются ошибки;
3) такая программа более удобна для сопровождения другим программистом.
Язык программирования высокого уровня наделяет программу важным свойством мобильности. Языки низкого уровня не обладают свойством мобильности, что означает перепрограммирование задачи при переносе ее решения на другие технические средства. Однако эффективность программ, реализованных на языках высокого уровня несколько ниже, чем у программ, реализованных на языках низкого уровня. При разработке программы следует помнить, что основные резервы эффективности программ лежат в области разумного выбора математических методов и алгоритмов.
Среди языков программирования высокого уровня существуют универсальные и специальные языки. Специальные языки создаются, как правило, на основе универсальных языков и обладают всеми преимуществами языков высокого уровня. Специальные языки предназначены снизить затраты на программирование специальных алгоритмов и программ. Так, например, для программирования имитационных моделей предназначен языки GPSS и Simula, систем управления базами данных (СУБД) – язык Clipper, систем искусственного интеллекта – языки Lisp и Prolog, систем управления – языки Modula и ADA.
Включение в программу дополнительных операторов контроля данных позволяет уменьшить вероятность возникновения ошибочных ситуаций при работе программы. Существуют следующие виды проверок:
• проверки допустимости значений переменных (числовых, логических, символьных);
• проверки допустимости типов данных в выражениях программы;
• проверки допустимости значений индексов массивов;
• проверки выполнения операций ввода-вывода. При этом ошибки ввода-вывода можно разделить на два вида: связанные с устройством вводавывода и связанные с передачей данных.
Метод программирования с защитой от ошибок требует разумного подхода. Если над данными выполнять все мыслимые проверки, эффект от применения метода может стать отрицательным.
Современные системы программирования в процессе трансляции автоматически включают в исходную программу специальные подпрограммы, реализующие указанные виды проверок.
Структурное проектирование является воплощением системного подхода в процесс создания и эксплуатации программного обеспечения ЭВМ.
Логика алгоритма или программы должна опираться на минимальное число простых управляющих структур. Теорема о структурировании, доказанная Бемом и Джекопини, устанавливает, что логическая структура алгоритма или программы может разрабатываться с использованием трех элементарных алгоритмических структур: следования, разветвления (выбора), повторения (цикла). Графические изображения этих элементарных алгоритмов приведены на рис. 5.1.
Структура "следование" обеспечивает естественную последовательность выполнения действий и определяет линейную структуру алгоритма. Структура "разветвление" обеспечивает выбор того или иного выполняемого действия в зависимости от истинности либо ложности некоторого логического условия. Структура "повторение" предусматривает многократное повторение действия.