ЗАМЕЧАНИЕ
В некотором смысле можно провести аналогию между исполнителем (в
качестве которого выступает процессор, виртуальная машина, иногда — робот)
в императивных языках и «машиной вывода», являющейся более
«интеллектуальной» версией исполнителя.
Еще одно достоинство декларативных языков — пригодность для
формальных рассуждений, которые, в частности, могли бы поднять методы
обеспечения надежности и безошибочности в программировании на новый
уровень (известно, что тестирование может помочь обнаружить ошибки в
программах, но не может гарантировать их отсутствия). К сожалению,
существующие методы формального анализа программ чрезвычайно
трудоемки. Много усилий было направлено на создание более простых и
28
строгих языков, а также совершенствование методов анализа, но
результаты не обнадеживают.
Декларативная программа обладает также следующим преимуществом.
Она может быть подвергнута логическому анализу в своих собственных
понятиях, для чего не требуется привлечение дополнительных
формализмов, таких как предикаты на состояниях. Более того, возникает
возможность создания инструментальных средств, позволяющих
автоматизировать процессы анализа, преобразования и синтеза программ.
Появление таких средств может в корне изменить программирование. При
программировании на традиционном (императивном) языке у
программиста нет иного выбора, кроме как вникать в низкоуровневые
подробности выполнения программ. В декларативных языках логика и
управление отделены друг от друга. Декларативную программу проще
написать и, что немаловажно, проще понять, чем эквивалентную
императивную программу. Помимо этого возникает возможность
переложить ответственность за реализацию порядка выполнения операций
на компьютер. Более того, становится возможным использовать
нетривиальные алгоритмы планирования вычислений, такие как
недетерминированные, «ленивые» и параллельные подходы.
К сожалению, универсального решения, позволяющего решать подобным
образом произвольные задачи, не существует, иначе отпала бы
необходимость в программировании и программистах. Тем не менее в
конкретных предметных областях при наличии заранее подготовленных
программных модулей, из которых может быть «собрана» требуемая
программа решения, декларативный подход возможен. Довольно
успешными реализациями декларативного подхода можно считать язык
логического программирования Пролог, основанный на выводе в логике
предикатов, а также, как уже говорилось, SQL — язык запросов к
реляционным СУБД.
Идея визуального программирования, также называемого графическим,
сводится к тому, что написание программы как текста заменяется в том
или ином масштабе ее изображением в виде графической диаграммы
(рисованием).
В
современных
системах
программирования
просматривается тенденция к развитию средств, позволяющих
программисту при создании программы оперировать не текстовыми,
синтаксическими
конструкциями,
а
графическими
образами.
Традиционный термин «писать программу» при этом трансформируется в
«построить, проектировать программу». Описываться при этом могут
самые разные аспекты программного комплекса. Такое богатство средств
визуального представления обусловило возникновение некоторых
трудностей при определении понятия визуального, или графического
программирования. Существуют следующие варианты: «использование
29
графических средств разработки и визуальной метафоры при создании
программного
обеспечения»
(Microsoft),
«программирование,
предусматривающее создание приложений с помощью наглядных
средств», «графический язык программирования — любой язык
программирования, в котором программы задаются путем графического
манипулирования элементами взамен текстового манипулирования ими»
(Википедия) и пр. Визуальное представление обладает рядом
значительных преимуществ перед текстовым представлением, в частности,
высокой наглядностью и удобством для человека, что позволяет достичь
ряда целей, в том числе сокращения трудоемкости разработки, повышения
качества и надежности создаваемых программ. В настоящем учебнике
визуальным языкам программирования посвящена отдельная глава.
Попытки использования естественного языка в программировании имеют
довольно долгую историю. С самого появления ЭВМ весьма
привлекательной является идея общения с компьютером на обычном
человеческом языке — русском, английском, японском и т. д.
Действительно, как было бы здорово, придя с занятий, сказать домашнему
компьютеру: «Рассчитай мне курсовую по физике!» — и получить готовый
результат. Однако все усилия в этом направлении, несмотря на постоянно
появляющиеся заявления вроде «еще чуть-чуть», «через пять лет» и т. д.,
не принесли решающего успеха. Это не кажется удивительным, если
вспомнить, что, как показано еще в классической работе А. Тьюринга [3],
создание компьютера, способного общаться на произвольные темы на не
специально усеченной версии естественного языка, эквивалентно
созданию искусственного интеллекта в полном смысле слова — машины,
не уступающей разуму человека. Да и вопрос о самой принципиальной
возможности создания искусственного интеллекта остается открытым.
К сожалению, естественный язык неполон, неточен, избыточен, и
неоднозначен [4]. Тем не менее предпринят ряд успешных попыток
применения некоторых ограниченных подмножеств естественного языка в
определенных предметных областях (запросы к базам данных,
искусственные миры, к примеру, мир кубиков [2]). Как правило, в таких
случаях предложения должны строиться по заранее предписанным
правилам, а передаваемый смысл — соответствовать некоторой точно
определенной системе понятий.
Контрольные вопросы и упражнения
1.
В чем заключаются особенности программируемых ЭВМ по сравнению
с другими машинами?
2.
Что называется системой команд компьютера?
3.
Опишите возможности машины Беббиджа и программы Ады Лавлейс.
30
Когда была написана первая программа?
4.
В какой стране и когда был построен первый компьютер?
5.
Что представляет собой язык Plankalkül, разработанный К. Цузе?
6.
Сколько языков программирования насчитывается сегодня? Многие ли
активно используются? Выскажите свое мнение о причинах.
7.
Перечислите преимущества и недостатки — программирования в
машинных кодах.
8.
Перечислите преимущества и недостатки — программирования на
ассемблере.
9.
Перечислите преимущества и недостатки программирования на языках
высокого уровня.
10.
Существуют ли основанные на русской лексике языки
программирования? Приведите примеры таких языков.
11.
В чем разница между интерпретатором и компилятором? Перечислите
их преимущества и недостатки.
12.
Каковы основные направления исследований в области языков
программирования четвертого поколения?
13.
Что такое предметно-ориентированные языки программирования?
Перечислите их достоинства и недостатки.
14.
Сколько поколений языков программирования известно по состоянию
на 2013 год?
15.
В чем состоит сущность декларативного подхода к программированию?
16.
В чем состоят основная идея и преимущество визуального языка?
17.
В чем заключаются особенности естественных языков? Что такое
неполнота, неоднозначность, избыточность?
18.
Перспективен ли естественный язык для постановки задач ЭВМ?
Почему? Обоснуйте свое мнение.
31
Императивное программирование
После рассмотрения предыстории перейдем к более подробному описанию
существующих и используемых сейчас языков программирования.
Заметим, что они довольно сильно различаются между собой в
зависимости от используемых базовых теоретических положений — так
называемой модели вычислений.
Большинство языков традиционно принадлежат к так называемой
императивной модели. В силу этого их иногда называют традиционными.
Не совсем точным термином, однако используемым в сходном значении,
является процедурное программирование.
Рассмотрим императивную модель более подробно. Она тесно связана с
внутренним устройством большинства современных ЭВМ — так
называемой фон-неймановской архитектурой.
Достарыңызбен бөлісу: |