НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

Процедуралисты и декларативисты

В нормальных системах некоторый объем знаний содержится в программах, а некоторый - в декларативных структурах. Естественно полагать, что для каждой конкретной цели выбор будет очевидным. Однако здесь имеется возможность для полемики, и время от времени происходят столкновения между процедуралистами и декларативистами. В то время как одни исследователи стараются как можно больше заключить в процедурах, другие предпочитают размышлять в терминах очень простых программ, оперирующих с большими базами данных.

Споры о том, должны ли знания заключаться в программах или в базах данных

Давайте для интереса посмотрим на следующую, хотя и воображаемую, но в достаточной степени типичную дискуссию:

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

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

Декларативист: Видимо, никто не научил вас, что "разделяя, понимай" - это ключевой принцип в науке. Пусть я несколько по

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

Процедуралист: Ба! Вы правы относительно принципа "разделяя, понимай". Мир создан из почти разделимых систем, и я согласен, что лучшим подходом к большинству проблем является независимое изучение отдельных элементов в надежде, что их поведение не изменится, когда мы соберем их все вместе. Но рано или поздно придется посмотреть правде в глаза. Существуют взаимодействия, и то, что нами сделано, позволит контролировать и использовать те самые взаимодействия, которые вы хотели бы игнорировать. Верно, что необходимо как-то обуздать ничем не сдерживаемую свободу языков программирования. Но не забывайте, что за дело взялось структурное программирование. На опасных путях возведены баррикады, они требуют от программиста думать в терминах целей, которые должны быть достигнуты их программами, требуют, чтобы при построении больших программ из малых программист использовал только три допускаемые связки, а именно SEQUENCE (ПОСЛЕДОВАТЕЛЬНОСТЬ), комбинация IF-THEN-ELSE (ЕСЛИ-ТО-ИНАЧЕ) и какого-то типа механизм REPEAT-UNTIL (ПОВТОРЯТЬ-ПОКА).

Рефери: Давайте не будем вдаваться в технические детали! Я не уверен, что все мы уже понимаем, о чем здесь идет речь.

Декларативист: Я-то понимаю, и я признаю, что Структурное программирование принесло некоторую пользу, но его успехи находятся в контрасте с вашими новыми необычными теориями программирования, например с гетерархией.

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

Декларативист: Хорошо, но я слышал, например, что программы могут просыпаться и начинать работу более или менее случайным образом.

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

Декларативист: Это несерьезно. У меня есть друзья, которые составляют системы продукций и они рыдают от непредсказуемых взаимодействий...

Процедуралист: Вы не правы. Эти непредсказуемые взаимодействия являются удачей, а не несчастьем. Как бы вы могли включить в систему фактор вдохновения?

Рефери: Довольно, не будем заходить так далеко. Вы оба становитесь слишком эмоциональными.

Декларативист: Если он такой умный, посмотрим, как он представит 2 в виде программы.

Процедуралист: Ага, я поймал вас! Два и есть программа. Если вы пишете 2+3, то в действительности вы посылаете программам 2 и 3 сообщение, которое они вместе понимают через межпроцессорные сообщения. Результатом будет 5, кстати.

Рефери: Ну, это кажется, крайняя точка зрения...

Процедуралист: От вас ожидается нейтралитет!

Рефери: ...может быть вы все-таки постараетесь придать вашим взглядам конкретную форму, сказав что-нибудь о некотором конкретном кванте знаний, скажем, о том, что все-люди ошибаются.

Декларативист: Хорошо, я бы просто записал этот факт более или менее так же, как вы его сформулировали, не пытаясь предвосхитить характер его использования, включив его в некую процедуру.

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

Рефери: Четырех?

Процедуралист: Да. Во-первых, может быть, потребуется отметить, что нечто является ошибающимся, если обнаруживается, что это человек. Или иначе, если я хочу показать, что нечто может ошибаться, то хорошим методом будет показать, что это человек. Это два выбора - необходимость и достаточность, которые мой коллега декларативист не различает, да и не может различить. Затем, разумеется, существуют параллельные возможности, проистекающие из отрицания: если нечто, как показано, не может ошибаться, то я могу вывести и фиксировать факт, что это не человек; если нужно показать, что нечто не является человеком, то разумно было бы показать, что оно не способно ошибаться.

Декларативист: Но ведь это неэффективно. Вы должны хранить простой факт четырьмя способами!

Процедуралист: Чтобы охватить все возможные комбинации, необходимо лишь четыре бита. В наши дни это ничто.

Процедуралисты и декларативисты втайне заодно

Итак, эти дискуссии идут и идут, иногда становясь весьма жаркими. Любопытно, однако, что в чистом виде крайние позиции гораздо ближе друг к другу, чем каждая из них к середине. Те мириады программ, которые создает процедуралист из прежних элементов данных, все еще остаются данными в отношении вычислительной машины, которая работает в соответствии с ними. А с другой стороны, непроцедуралист, вынужденный прятать то, что относится к процедурам, в базу данных, создает закамуфлированные последовательности, которые его однородная решающая процедура интерпретирует столь же рабски, как если бы это были сознательно написанные программы. Вся проблема в целом является хорошей основой для споров, поскольку в ней легко перебегать с одной стороны на другую!

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь