Имеется еще один принципиально важный источник сложности, затрудняющий "взаимопонимание" с компьютерами. Речь идет об отсутствии в современных компьютерах модели реального мира, со­гласованной с представлениями о мире у программистов и пользова­телей. Поэтому в общем случае компьютер не в состоянии контроли­ровать указания программиста или действия пользователя с прагма­тической точки зрения (контролировать соответствие между дейст­виями и теми целями, ради которых эти действия совершаются, - цели компьютеру неизвестны).

Из-за этого самая "мелкая", с точки зрения создателя програм­мы, описка может привести к совершенно непредсказуемым послед­ствиям (широко известен случай, когда из-за одной запятой в про­грамме на Фортране взорвалась космическая ракета, направлявшая­ся на Венеру; пропали усилия, стоившие миллиарды долларов).

Итак, в качестве второго источника сложности в современном программировании следует назвать незнание компьютером реального мира. Лишенный необходимых знаний, компьютер не может не только скорректировать неточно указанные в программе действия, но и проинформировать об отклонениях от направления на цель ра­боты. Традиционное для компьютеров управление посредством ука­зания действий, а не целей требует учета мельчайших нюансов всех обстоятельств, в которых может оказаться исполнитель в процессе предоставления нужной услуги. Это резко увеличивает число объек­тов, с которыми приходится иметь дело при создании программ. От­сюда повышение сложности программирования, увеличение размера программ, понижение их надежности и робастности.

НЕ нашли? Не то? Что вы ищете?

Со вторым источником сложности борются, развивая методы представления в компьютерах знаний о реальном мире и эффектив­ном учете этих знаний при создании и исполнении "дружественных" программ.

1.14. Два основных средства борьбы со сложностью. Основной кри­терий качества ЯП

Рассмотренные источники сложности оказывают определяющее влияние на теорию и практику в области ЯП. Важнейшим средством борьбы с семантическим разрывом служит аппарат абстракции-конк­ретизации, имеющийся в том или ином виде в любом ЯП. Именно этот аппарат - основа проблемной ориентации языковых вырази­тельных средств.

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

Важнейшим средством борьбы с незнанием реального мира слу­жит аппарат прогнозирования-контроля. Имеются ЯП, в которых этот аппарат практически отсутствует (Апл, Форт, Лисп) или очень слаб (любой ассемблер). Однако именно этот аппарат - основа повы­шения надежности и робастности программ. Последнее не означает, что "дружественные" программы невозможно писать на ЯП со сла­бым прогнозированием-контролем. Просто в этом случае создание подходящего аппарата полностью возлагается на программиста.

Например, в Фортране характерное средство прогнозирования - встроенные (предопределенные) типы данных. Соответствующий контроль предусмотрен семантикой языка, но средств управления таким контролем нет (новые типы данных вводить нельзя). В таких ЯП, как Паскаль или Ада, этот аппарат более развит, а в так назы­ваемых языках искусственного интеллекта он прямо предназначен для представления достаточно полных знаний о мире, целей дея­тельности и контроля действий как самой программы, так и пользо­вателя.

Упражнение. Приведите примеры средств абстракции-конкретизации и прогнозирования-контроля в известных вам ЯП. Постарайтесь подобрать симметричные, взаимно дополнительные средства. Убедитесь, что эта дополнительность обеспечена не всегда.

Теперь мы готовы сформулировать следующий основной критерий качества ЯП (как инструмента, т. е. с технологической позиции): язык тем лучше, чем менее сложно построенное на его основе про­изводство программных услуг.

На этом оставим пока технологическую позицию и займемся се­миотической.

1.15. Язык программирования как знаковая система

Продолжим уточнение понятия "язык программирования". Наше новое интенсиональное определение ЯП таково:

язык программирования - это знаковая система для планирования поведения компьютеров.

Итак, не любой "инструмент", а "знаковая система" и не для произвольных "исполнителей", а только для компьютеров. К ограни­чению класса исполнителей в этом определении мы подготовились заранее, а вот о знаковых системах еще подробно не говорили.

Знаковая система - это совокупность соглашений (явных или не­явных), определяющих класс знаковых ситуаций. Понятие знаковой ситуации в семиотике относят к первичным понятиям, представле­ние о которых создают с помощью примеров, а не явных определений. Необходимые компоненты знаковой ситуации - знак и денотат. Говорят, что знак обозначает денотат (знак называют также обозна­чением или именем, а денотат - обозначаемым или значением). Так, в модели передачи сообщения само сообщение служит знаком, его смысл - денотатом.

Вот еще знаковые ситуации (первым укажем знак, вторым - де­нотат): буква и соответствующий звук, дорожный знак ("кирпич") и соответствующее ограничение ("въезд запрещен"), слово и соответ­ствующее ему понятие. Каждый без затруднений пополнит этот спи­сок.

Когда класс знаковых ситуаций определяется совокупностью со­глашений (правил), устанавливающих закономерную связь между структурой знака и его денотатом, говорят, что эти соглашения об­разуют знаковую систему (или язык). При этом правила, определяющие структуру допустимых знаков, называются синтаксисом язы­ка, а правила, определяющие соответствующие допустимым знакам денотаты, называются семантикой языка. (Науку о синтаксисах язы­ков называют синтактикой, а слово "семантика" используется для обозначения как конкретных правил некоторого языка, так и общей науки о таких правилах).

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

Упражнение. Приведите пример синтаксического и семантического правила из таких знаковых систем, как Фортран, Бейсик, Паскаль, Ассемблер.

В общем случае в ЯП знаки - это элементы программ (в том чис­ле полные программы), а денотаты - элементы и свойства поведения исполнителя (атрибуты его поведения), в частности, данные, опера­ции, управление, их структура, их связи и атрибуты. Например, знаку, составленному из шести букв "arctan" (элементу программы на Фортране), использованному в этой программе в подходящем контексте, соответствует в качестве денотата такой элемент поведе­ния исполнителя, как вычисление арктангенса.

Знаку, составленному из двух букв "DO" (элементу программы на Фортране), в одном контексте в качестве денотата может соответ­ствовать такой элемент поведения, как вход в цикл, а в другом - пе­ременная вещественного типа, в третьем - массив целого типа.

Упражнение. Выпишите подходящие контексты.

Итак, знаковая система - это правила образования знаков (син­таксис) и согласованные с ними правила образования денотатов (се­мантика). Подчеркнем, что правила использования денотатов для целей, выходящих за рамки семантики (т. е. прагматика), обычно не включаются в знаковую систему. Например, в Фортране нет каких-либо правил, ограничивающих применение соответствующих вычис­лительных процессов для неблаговидных целей.

Теперь уточненное определение ЯП как знаковой системы для планирования поведения компьютеров должно быть полностью по­нятным.

1.16. Разновидности программирования

Чтобы создать себе более удобную основу для формирования оце­нок, принципов и требований, примем соглашения, сужающие об­ласть наших рассмотрений.

Во-первых, программировать можно с разной целью. Например для развлечения и обучения ("игровое" программирование, его ха­рактерное свойство - интерес не столько к программе-результату, сколько к самому процессу программирования); для отработки идей, приемов, инструментов, методов, критериев, моделей ("эксперимен­тальное" программирование, его характерное свойство - созданная программа не предназначена для применения без участия автора, т. е. результат такого программирования неотчуждаем). В дальней­шем будем рассматривать только "индустриальное" программирова­ние, цель которого - создание программных изделий (программных продуктов) на заказ или на продажу. Характерное свойство - отчуж­даемость результата.

Во-вторых, может быть различным характер использования заго­товок программ. По этому критерию различают по крайней мере три разновидности программирования:

сборочное - программа составляется из заранее заготовленных модулей (так обычно сейчас работают пакеты прикладных про­грамм);

конкретизирующее - программа получается в результате преобразования универсальных модулей-заготовок (в результате их специа­лизации) в расчете на конкретные условия применения; цель специ­ализации - повышение эффективности (снижение ресурсоемкости) универсальной программы;

синтезирующее - роль заготовок относительно невелика.

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

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24