538.57K
Categories: programmingprogramming informaticsinformatics

Алгоритмизация и программирование

1.

3. Алгоритмизация и
программирование
3.2 Системы и технологии
программирования

2.

Особое место в программном обеспечении (ПО) компьютера
занимают системы программирования. Как правило, система
программирования включает в себя три основных компонента:
1) язык программирования – язык, на котором пишутся программы;
2) транслятор (интерпретатор или компилятор) – программа,
«переводящая» язык программирования на язык компьютера;
3) библиотеку программ – заранее разработанные программы,
реализующие типовые функции и вычислительные методы.
В настоящее время таких типовых программ в мире насчитывается
несколько тысяч. Первые системы программирования носили
машинно-ориентированный характер. Это были коды, приближенные к
работе компьютера. Для обработки компьютером машинных кодов
требовались простейшие трансляторы. Однако такие языки
программирования достаточно сильно зависели от типа и марки
компьютера. Программы представляли собой набор кодов для
компьютера, подготовка которых была крайне трудоемким занятием
для программистов.

3.

В конце 1950-х гг. было создано несколько алгоритмических языков,
самыми известными из которых являлись Algol-60 и FORTRAN-IV. Это
были языки программирования, которые позволяли описывать
алгоритмы без привязки к конкретной модели ЭВМ и использовали
элементы естественного языка – английские слова и символы.
Естественно, что значительно усложнились трансляторы, поскольку
разница между исходным языком написания программы и машинным
языком возросла.
Первые алгоритмические языки были в основном ориентированы
на решение математических, инженерно-технических задач, поскольку
именно в этих областях компьютерная техника нашла поначалу самое
серьезное применение. Впоследствии появились аналогичные языки для
решения экономических задач, задач управления технологическими
процессами, проектированием, т. е. они были ориентированы на
решение проблем в конкретных областях. Именно это и обусловило их
общее название – проблемно-ориентированные.

4.

По мере сужения их специализации соответственно росло число
языков программирования, сначала оно измерялось десятками, потом –
сотнями. Это породило новые проблемы совместимости программ на
разных языках программирования при разработке больших систем, и
возникла идея создания универсальных языков программирования.
Одним из таких языков стал PL/1 (Programming Language), который,
впрочем, вскоре распался на определенное число подмножеств.
Универсальные языки наиболее удобны в использовании,
поскольку максимально приближены к естественному человеческому
языку, и, конечно, процесс компиляции для них достаточно сложен.
Языки этого класса (Basic, Си, Pascal, Ada и др.) объединяет одно – они
шаг за шагом последовательно реализуют алгоритм, поэтому их
называют алгоритмическими, что представляется не совсем
корректным, поскольку любое программирование связано с
реализацией того или иного алгоритма. Более правильным
представляется называть эти языки процедурно-ориентированными и
также связанную с ними технологию – технологией программирования.

5.

Широкое внедрение средств компьютерной техники в различные
сферы жизни и деятельности человека стимулировало развитие
автоматизированных методов и инструментальных средств,
применяемых для создания программного обеспечения. Производство
современного ПО происходит на фоне высоких требований,
предъявляемых к качеству создаваемых программ и значительной
сложности выполняемых ими функций.
«Идеальной» представляется такая технология программирования,
которая по некоторому достаточно неформальному описанию объекта
программирования автоматически генерирует текст корректной
программы. Разработка любого программного средства может быть
представлена как процесс, состоящий из ряда последовательных
преобразований одного описания решаемой задачи в другое, начиная от
постановки задачи и заканчивая программой, реализованной в кодах
конкретного компьютера.

6.

Весь процесс реализации конкретной задачи на компьютере, с
определенной степенью условности, можно разделить на 10 этапов:
1. Содержательная постановка задачи.
2. Математическая постановка задачи.
3. Формализация математической постановки – выбор метода
решения.
4. Разработка алгоритма решения задачи.
5. Разработка ПО, реализующего алгоритм.
6. Отладка ПО (выявление и устранение ошибок).
7. Тестирование ПО и анализ результатов.
8. Проведение доработок по итогам тестирования.
9. Разработка технической документации (инструкций) для
пользователей.
10. Сдача в эксплуатацию.

7.

Все время существования программного средства от зарождения
идеи до его создания и эксплуатации обычно определяют как
жизненный цикл. Укрупненно можно выделить пять наиболее важных
этапов жизненного цикла ПО: разработка спецификации (10%),
проектирование (20%), кодирование (10%), отладка и опытная
эксплуатация (сопровождение) (60%). В скобках записаны
относительные затраты ресурсов на создание ПО.
По затратам времени, человеческих и машинных ресурсов все эти
этапы неодинаковы. Наиболее дорогими в этом смысле являются
этапы, связанные с отладкой – поиском ошибок в программах. Затраты
ресурсов на них могут быть равными или даже превосходить
совокупные затраты ресурсов на остальных этапах.
Эти затраты быстро увеличиваются при возрастании требований к
качеству ПО. На долю устранения ошибок и сопровождение ПО
приходится не менее 60 % всех затрат. Следует учитывать, что
значительная часть работ, выполняемых на этапе сопровождения,
связана с поиском и устранением оставшихся
в программе ошибок.

8.

История развития методов и средств автоматизации
программирования в этом отношении говорит сама за себя.
Первоначально все усилия были сосредоточены на этапе
программирования, что позволило решить ряд проблем, связанных с
ограничениями функциональных возможностей существующих к тому
моменту языков программирования.
На
этом
этапе
следует
выделить
развитие
узкоспециализированных языков программирования, таких как COBOL,
Simula,
«Симскрипт»,
«Аспид»,
«Аналитик»
и
т.д.
Специализированные
или
проблемно-ориентированные
языки,
построенные для решения конкретных задач, несомненно, упрощают
процесс разработки программных продуктов в выбранной предметной
области, но в то же время для новых языков характерна проблема
преемственности, а для специализированных – ограниченности
области применения.

9.

Постепенное усложнение решаемых задач, а вместе с ними кодов
и объемов разрабатываемых программных средств, заставило
критически переосмыслить сложившийся к концу 1960-х гг. стиль и
технику программирования. В связи с чем, начиная с 1970-х гг.,
усилиями
рабочей
группы
Технического
комитета
по
программированию Международной федерации по обработке
информации, состоящей из таких известных ученых, как Никлаус
Вирт, Давид Грис, ЭдсчерДейкстра, У. Дал, Д. Парнас, Чарльз Хоар и
руководимой профессором Владиславом Турским, формируются основы
методологии и теории программирования.
В среде программистов утверждается принцип структурного
программирования как наиболее производительного стиля (например,
язык Си). Развитие концепции структуризации привело к осознанию
необходимости структуризации данных, что и определило появление в
языках программирования механизмов абстрагирования типов данных
(например, «Модула» и др.).

10.

Последнее легло в основу техники модульного программирования,
содержательной базой которой является интерпретация модуля как
программной единицы. В модульном программировании акцент
делается на разбиение программы на модули таким образом, чтобы
данные (обрабатываемые модулем) были спрятаны в нем.
Эволюция техники модульного программирования привела к
появлению объектно-ориентированного стиля программирования,
который во многом унифицировал процесс создания ПО. К
достоинствам этого метода относится то, что в нем более полно
реализуется технология структурного программирования, облегчается
процесс создания сложных иерархических систем, появляется удобная
возможность создания пользовательских библиотек объектов в
различных областях применения.

11.

Параллельно с развитием процедурного стиля программирования в
начале 1970-х гг. появляются непроцедурные языки логического
программирования и программирования искусственного интеллекта
(Lisp, Prolog, «Рефал», «Приз»). Программа на таких языках
представляет собой совокупность правил, определяющих отношения
между объектами и цели (запросы). Сегодня Prolog – язык,
предназначенный для 108 программирования компьютерных
приложений, использующих средства и методы искусственного
интеллекта, создания экспертных систем и представления знаний.
В последнее время в связи с совершенствованием технических
средств отображения информации утверждается новый графический
подход к решению проблемы автоматизации разработки ПО,
основанный на идее привлечения визуальных форм представления
программ, и большей степени соответствующих образному способу
мышления человека. Применение графических методов обещает
кардинально повысить производительность труда программиста.

12.

Кроме того, графическая форма записи по сравнению с текстовым
представлением программ обеспечивает более высокий уровень их
структуризации,
соблюдение
технологической
культуры
программирования,
предлагает
более
надежный
стиль
программирования.
В настоящее время известно достаточно большое количество
удачных инструментальных средств визуализации программирования.
Прежде всего это относится к визуальным средствам разработки
экранных форм, меню и других элементов программы (MS Windows,
VisualBasic и т .д .), средствам автоматизации проектирования ПО
(CASE средствам), средствам быстрой разработки приложений для
информационных систем (VisualFoxPro), текстовым и графическим
редакторам, издательским системам и т.д.

13.

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

14.

Современные
пассивные
методы
безошибочного
программирования
основываются
на
реализации
процессов
автоматизации всех этапов жизненного цикла ПО от проектирования и
кодирования программ до документирования и их сопровождения. К
таким
средствам
относятся:
CASE-средства,
объектноориентированное
программирование,
методы
логического
программирования, методы визуального программирования, поскольку
приближают формы представления программы и способы ее
кодирования к образному способу мышления человека.
Активные методы повышения надежности ПО совершенствуются
за счет развития средств автоматизации тестирования программ.
Разработка систем тестирования программ позволяет максимально
сократить число ошибок, допускаемых человеком при разработке
программ, и повышает надежность программирования.
English     Русский Rules