Воистину, кто не умеет работать, тот учит. Работа застопорилась и тянет пофлудить. Хочется, конечно, еще поспорить о терминах, мол, ООП - это прием чисто дедуктивный а декомпозиция, определенная выше - прием чисто индуктивный, и прочее бла-бла-бла... Но не будем. Как правильно заметил коллега, понятия хорошо бы минимизировать. Нас интересует только, есть ли прок от прохода сверху вниз, если да, то есть ли в Forth средства его поддержки, и, если нет, то как их добавить. Итак, вернемся к Forth. Все помнят картинку из "TF" - иерархия лексиконов робота. Вот только как ее понимать? Что вся иерархия лексиконов родится естественно, путем углубления в суть задачи, и все большей детализации/формализации первоначального человеческого описания? Или, что удачна иерархия может быть порождена только всплесками программистской гениальности на ключевых уровнях? Там же очень красиво сказано: "На самом деле Вам не стоит писать каких-либо серьезных задач на Форте; как язык, он просто недостаточно мощен. Вам "следует" писать на Форте свои собственные языки (лексиконы) для моделирования Вашего понимания проблемы, на которых Вы можете элегантно описать ее решение". Может это ключ? Самое смешное, для простых задач срабатывают все эти приемы: и дедукция, и индукция, и даже ООП, которое, подобно Prolog, до сих пор упивается красотой записи формулы: "Бобик - сын Шарика". Можно не только разобрать простую задачу на детали, можно даже обвесить эти детали предикатами, обосновывающими правильность разборки. Со сложными задачами сложнее. Интуитивно понятно, что хорошо бы иметь иерархию языков (лексиконов), просто и элегантно, описывающую все уровни модели решаемой задачи. Возникает два вопроса: 1) Должны ли эти языки быть связанными только именами предоставляемых интерфейсов? Например, машина управляющая файлами, должна понимать только команды open, close, read, write, ioctl. Свое внутреннее слово "+" она может понимать совершенно не так, как это же слово будет понимать построенная над ней машина форматного ввода-вывода. Красиво и логично. Однако, это противоречит нашему языковому опыту. Ведь, даже говоря о какой-то сложной философской проблеме, мы наряду со специфическими терминами используем и слова общечеловеческие, а иногда простонародные и матерные. Нечто подобное мы встречаем и в математике. Даже в сложных языках комбинаторики и матричного счисления мы используем язык арифметики. "+" обозначает нечто отличное от банального сложения только в языках, разработанных для анализа алгебр, но там речь идет, скорее, не о поднятии на уровень, выше, а, наоборот, о построении метаязыка, описывающего внутреннее устройство арифметики. Итак, нужен ли язык, понимаемый всеми машинами, независимо от их уровня? 2) Разбивая задачу на уровни, мы, как писал уважаемый коллега, должны действовать рационально. Что это значит? Эта задача сродни такой же, нерешаемой в общем случае, задаче, как организация работы человеческой бригады: будут ли они всем миром таскать доски или двое таскать, двое - пилить, один - строгать... Очевидно, есть какое-то конечное множество частных задач, на которые можно разбить исходную задачу. Насколько эти подзадачи непересекающиеся? Вроде бы, в каждой должны быть какая-то логика, какая-то арифметика... Алгоритмы, например, работы с множествами общеизвестны и постоянно востребованы, хотя и достаточно сложны. Зачем каждой из машин уметь хэшировать, сортировать, искать локальные оптимумы? А, ведь, так и будет, если программист будет делить задачу на части по-человечески. Надеяться, что все случаи применения какого-либо алгоритма можно учесть заранее (и вынести в отдельную машину) не приходится, это возможно только в простой задаче. Возможно ли разбиение задачи не с точки зрения программиста, но с точки зрения минимизации машинных и межмашинных операций? Можно ли предложить для этого какие-нибудь методики? Визуальное программирование это отрицает. Структуру кода определяют интерфейсные объекты, т.е. в конечном итоге логика человека-пользователя. (Надо заметить, что этот последний совсем необязательно оказывается доволен результатом.) Аналогично, согласно человеческим понятиям, сформированы и библиотеки подпрограмм языков высокого уровня. ...
Последний раз редактировалось gudleifr Сб фев 11, 2012 19:20, всего редактировалось 2 раз(а).
|