- •История развития программных технологий.
- •Жизнь реального мира и его отражения.
- •Информация и знаковые системы.
- •Абстракция знаковой системы.
- •Трудности определения знака.
- •Класс объекта и его экземпляры.
- •Класс субъекта и его деятельность.
- •Собственная жизнь знаков.
- •Рефлексивность развития культуры.
- •Абстрактная вычислительная машина.
- •Парадигмы современного программирования.
- •Рефлексия программного обеспечения.
- •Инструментальные средства программирования.
- •Типовая среда программирования.
- •Структурное программирование.
- •Управляющие структуры.
- •Наследие структурного программирования.
- •Иерархия представлений.
- •Нисходящее и восходящее проектирование.
- •Динамика нарастания детализации.
Абстракция знаковой системы.
«Нет ни искусства без упражнения, ни упражнения без искусства...»
Протагор из Абдеры, ок.480-410 гг.до н.э.
Рассмотрим взаимодействие элементов реального мира (а для нас они пока разделяются только на традиционные классы объектов и субъектов). Возможность взаимодействие объектов есть явно существующее и фундаментальное явление в реальном мире. Если мы будем рассматривать только парные взаимодействия, то остальные (т.е. трех, четырех объектов и т.д.) можно получить как композицию парных. Наиболее простой способ представить парное взаимодействие реальных объектов «А» и «В» в абстрактном мире можно представить как взаимодействие пары знаков «А*В» – имен элементов (порядок важен). Символ «*» – знак операциивзаимодействия. Очень часто, например как в данном тексте, для взаимодействия знак операции не используется (но подразумевается). Действительно, только буквы плотно следующие друг за другом образуют слово (а слово есть знак). Следовательно, в любой знаковой системе мы должны иметь некий алфавит символов и символы операций с ними. Следует только строго различать свойства реальности и свойства используемой знаковой системы.
Например, операция «следующий символ» подразумевается по умолчанию в строке символов, если нет «пробела» (играющего роль разделителя). Знаковые системы, образующие языки, несут не только правила порождающей их грамматики, но семантику – представление ими реального мира.
Если в реальном мире мы выделяем базовые классы объектов и субъектов, то несложно построить и основные классы видов из взаимодействий:
«объект-объект»;
«субъект-объект»;
«объект-субъект»;
«субъект-субъект»;
Очевидно, что для отражения реальности в знаковом виде нам необходима не только конкретизация элементов представления реальности (т.е. объектов и субъектов), но и их основных процессов взаимодействия, например таких как процессы их «размножения и гибели»:
«рождение элемента»;
«гибель элемента».
Заметим, что понятие объекта всегда подразумевает процесс (как минимум это процесс существования объекта). Обыденность этого факта часто играет с нами злые шутки при анализе проблемных ситуаций. Поэтому, нужно быть очень аккуратными в трактовке основных понятий мира процессов и различных приемов упрощения его представлений. Многие сущности, представляемые нами как базовые понятия («честь», «семья», «совесть», «качество», «счастье», «государство», «ответственность») на самом деле являются ярлыками классов сложных процессов.
Если в реальном мире выделяются процессы, то выделяются и события в них. Представление события - отдельная проблема в использовании знаковых систем для описания процессов. Как правило процессы – нечто продолжающееся (интервал), а события – мгновенные (точка) во времени. Но возможно использование множества моделей времени (или законов причинности). Необходимо, чтобы все базовые понятия в модели реального процесса и его событий были строго определены в рамках единой и непротиворечивой трактовки.
Трудности определения знака.
«Если не высказаны противоположные мнения, то не из чего выбирать...»
Геродот ок.490-425 гг.до н.э.
Возникновение и осознание понятия знака в нашей культуре всегда воспринималась как загадка (вспомним, «В начале было слово...», «Что в имени твоем?» и т.д.). По большому счету понятие знака загадкой остается и сейчас, что не мешает нам его использовать. Как и знак, понятие объекта и субъекта, традиционные для науки, имеют множество определений и почти интуитивно понятны. Но кроме рабочего определения типа: «Это выделяемые элементы реального мира...» - их сложно раскрыть конструктивно прежде всего потому, что они сами очень близки к фундаментальному понятию знака.
Последнее означает, что у нас есть некоторое правило выделения, используемое при наблюдениях реального мира, которое позволяет задать границу между объектом и остальным миром. Только после этого можно говорить о свойствах того, что мы отделили от мира. Почему мы можем выделять элементы реального мира? Вероятно потому, что он сложен, неоднороден и разнообразен. Но почему, пускай и частично, мы можем описать реальность символьными языками? Где границы нашего познания мира вообще, а где мы сталкиваемся с ограничениями выбранной нами знаковой системы? Сложные вопросы.
Например, в соответствие выделенному объекту реального мира ставится знак. Кажется все просто, но граница объекта есть своего рода другой объект. По определению у последнего есть своя граница и т.д. - очень просто получить «дурную бесконечность». С другой стороны – самих объектов может быть сколь угодно много. Нам остается единственный выход – быть точными и использовать знания и опыт, накопленный математиками. В такой ситуации они объявляют существование некоторого базового алфавита знаков
<А> ::= A1 |A2| ... |AN,
и правила построения из него новых знаков (слов и предложений)
<P> ::= <A> | <P> <A>.
Мы начинаем манипулировать самими знаками, т.к. это достаточно просто. Каждое слово при этом – новый знак, используемый при идентификации новых объектов в реальном мире. Составной символ «::=» читается как «это есть», а символ «|» как «или». Специальные «метаскобки» «<» и «>» подразумевают распознование конструкции из последовательности символов. Мы получили простейший формальный язык, порождающая грамматика которого позволяет в рамках конечного алфавита получить любое количество знаков – возможных имен объектов. Ясно, что естественные языки значительно более сложные системы и их исследование – отдельная наука. Но в основе их – те же идеи, что и у формальных языков.