Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программистские аналогии




Пирамида языков

 

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

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

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

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

Чтобы разобраться в развитии таких средств, удобно обратиться к языкам программирования.

 

 

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

Однако каждый конкретный пользователь решает только свой узкий круг задач, и универсальность ему не нужна. Напротив, он хотел бы ворочать большими блоками, что позволило бы ему уменьшить перебор. Иными словами, он желал бы иметь язык, ориентированный именно на его проблемы. Как же его получить?

При составлении нескольких самых простых программ некоторые сочетания команд все время повторяются, они как бы слипаются между собой. Такой комбинации можно присвоить имя, ввести ее в память, и оператор языка более высокого уровня готов. (Это аналогично выработке условного рефлекса – повторяющиеся стимулы и реакции становятся единым целым.) Такой вариант действий можно назвать путем «снизу».

Но есть и другой путь – «сверху». Анализируют все множество решаемых задач и ищут набор как можно более крупных частей, из которых складывался бы любой нужный алгоритм. Проводя опять‑таки параллель со строительством, можно сказать, что определяют комплект блоков, из которых удастся возвести все здания оговоренного типа.

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

В этих соотношениях проявляется общий принцип мышления – работать на верхних этажах языковой иерархии. Если в нашем распоряжении нет языка высокого уровня – то его надо создать. Главная цель при этом – избежать больших переборов вариантов.

Окончательный результат, например, обоснование какого‑то утверждения, должен быть приведен к чему‑то хорошо понятному: аксиомам в формальной теории, атомно‑молекулярным представлениям в химии (это – язык реализации). Значит, задача состоит в том, чтобы спуститься до этого уровня, а затем идти в обратную сторону (снизу вверх), осуществляя логический вывод, строгую дедукцию.

 




Поделиться с друзьями:


Дата добавления: 2015-05-08; Просмотров: 327; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.