ВУЗ:
Проблема переноса программ с одной машины на другую заключается в отсутствии общей точки зрения на то, что
именно считать стандартом данного языка программирования. В связи с этим Американский национальный институт стан-
дартов (ANSI) и Международная организация по стандартизации (ISO) приняли и опубликовали стандарты для многих по-
пулярных языков программирования. В других случаях применяются неформальные стандарты, которые являются следстви-
ем популярности того или иного диалекта языка, а также желания многих разработчиков компиляторов создавать продукты,
совместимые с другими, подобными им.
Тот факт, что языки третьего поколения не достигли истинной машинной независимости, на самом деле не имеет боль-
шого значения по двум причинам. Во-первых, они все же являются достаточно машинно-независимыми, для того чтобы
можно было относительно легко переносить программное обеспечение с одной машины на другую. Во-вторых, машинная
независимость – это лишь промежуточная ступень на пути к достижению более важных целей. Со временем машинная неза-
висимость стала вполне достижимой, однако она стала менее важной по сравнению с другими велениями времени. Действи-
тельно, понимание того, что машина могла бы выполнять такие операторы высокого уровня, как
Total ← Price + Tax,
породило среди ученых в области компьютерных наук мечту о создании среды программирования, которая позволила бы
людям общаться с машиной в терминах абстрактных понятий, а не заставляла их переводить эти понятия в машинно-
совместимую форму. Более того, ученым понадобились машины, способные самостоятельно выбирать алгоритмы, а не про-
сто выполнять действия, описанные с помощью набора инструкций. В результате спектр языков программирования заметно
расширился, что в конечном счете привело к усложнению их прежней классификации в терминах простого разделения на
поколения.
Парадигмы программирования. Классификация языков программирования по поколениям требует распределения их
по линейной шкале (рис. 5.1) в соответствии с той степенью свободы от компьютерной тарабарщины, которую данный язык
предоставляет программисту. Это позволяет ему мыслить понятиями, связанными непосредственно с решаемой задачей. В
действительности развитие языков программирования происходило несколько иначе. Оно протекало по разным направлени-
ям, связанным с альтернативными подходами к процессу программирования (называемыми парадигмами программирова-
ния). Таким образом, историческую схему развития языков программирования наиболее точно можно изобразить составной
диаграммой, показанной на рис. 5.2, на которой отдельные линии, символизирующие различные парадигмы программирова-
ния, появляются и развиваются независимо друг от друга.
Рис. 5.1. Схематическое представление поколений языков
программирования
Рис. 5.2. Эволюция парадигм языков программирования
В частности, на рисунке показаны четыре независимых направления, соответствующие функциональной, объектно-
ориентированной, императивной и декларативной парадигмам программирования, а также представлены различные относя-
щиеся к ним языки. Месторасположение названия языка на линии соответствует времени его появления относительно дру-
гих языков. Однако это вовсе не означает, что каждый последующий язык обязательно является наследником предыдущего.
Императивная (imperative paradigm), или процедурная парадигма (procedural paradigm), представляет традиционный
подход к процессу программирования. Действительно, именно в соответствии с этой парадигмой построен цикл обработки
команды центрального процессора: "извлечь-декодировать-выполнить". Как следует из названия, императивная парадигма
определяет процесс программирования как запись последовательности команд, которая при выполнении выполнит обработ-
ку данных, необходимую для получения желаемого результата. Таким образом, для решения задачи императивная парадигма
предлагает попытаться найти алгоритм ее решения.
В противоположность этому, декларативная парадигма (declarative paradigm) во главу угла ставит вопрос "Что пред-
ставляет собой задача?", а не "Какой алгоритм нужен для решения задачи?". Основная проблема здесь состоит в том, чтобы
создать и реализовать общий алгоритм решения задач. После этого задачи можно формулировать в виде, совместимом с
этим алгоритмом, а затем применять его. В этом случае роль программиста заключается в точной формулировке задачи, а не
в поисках и реализации алгоритма ее решения.
Страницы
- « первая
- ‹ предыдущая
- …
- 109
- 110
- 111
- 112
- 113
- …
- следующая ›
- последняя »
