Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ (Понятие языка программирования).pdf
Добавлен: 24.04.2023
Просмотров: 208
Скачиваний: 1
Глава 1. Теоретические основы понятия языка программирования
-
-
Понятие языка программирования
-
Постоянное расширение сферы применения вычислительной техники и необходимость построения все более сложных, но надежных программных систем заставляют исследователей вновь и вновь обращаться к определению основных понятий программирования. Несмотря на многообразие существующих моделей программ и парадигм программирования, нельзя не признать того обстоятельства, что разработка общепринятой теории программирования еще не завершена. В то же время понятно, что центральной составляющей такой теории должны быть строгие уточнение (экспликации) понятий программы и программирования. Одним из подходов к исходным уточнений этих понятий является композиционно-номинативный подход, который может рассматриваться как дальнейшее развитие композиционного программирования[1].
Этот подход базируется на следующих трех основных принципах: развития, композицийности и номинативности. Принцип развития (от абстрактного к конкретного) говорит о постепенном уточнения понятия программы, начиная с наиболее абстрактных и продолжая более конкретными и богатыми уточнениями.
Принцип композиционности трактует программы как функции, которые строятся на других функций с помощью специальных операций, называются композициями.
Принцип номинативности говорит о необходимости использовать отношение именования для работы с программами и данными.
Идеи развития, композиционности и номинативности хорошо известны и прослеживаются с глубокой древности. Категория развития является одной из центральных категорий в таком философском направлении, как диалектика, среди представителей которой выделим Гераклита Эфесского и В. Ф. Гегеля. Композиционные свойства языковых выражений были четко сформулированы Г.Фреге и Р. Карнап.
Принцип композиционности был основным в композиционном программировании, предложенном В.Н. Редько. Разным аспектам номинативности (именования) посвятили свои работы Аристотель, Гоббс, Джон Стюарт Милль, Джордж Буль, Пирс, Фреге, Рассел, Крипке и многие другие.
Большой толковый словарь современного русского языка , электронный словарь и другие словари дают следующую трактовку слова «программа».
Этимология от греческого prographein - предварительная запись (pro - перед + graphein - писать). Позже латинское programma: письменное сообщение.
Значения:
• заранее продуманный план какой-либо деятельности, работы и тому подобное;
• план для программирования некоторого механизма (как компьютер)
• последовательность кодов инструкций, можно ввести в механизм (например, компьютер)[2].
Анализируя эти и другие определения термина «программа», приходим к выводу, что определения используют такие термины, как «план», «последовательность», «действие», «инструкция», «программирование», «компьютер» и т.д.
Среди различных значений слова "программа" выделим лишь те, которые близки к предмету нашего рассмотрения.
• чертежи или диаграмма,
• метод достижения конечной цели,
• упорядоченная классификация частей проекта или цели,
• подробная программа действий[3].
Видим, что определение термина «план», которые нас интересуют, обращаются снова к слову «программа». Отсюда можно сделать следующий вывод: понятие программы является очень широким понятием, которое не определяется как конкретизация некоторого другого понятия (не определяется по схеме родовидовых понятий Аристотеля).
Основные понятия программирования можно представить как триаду пользователь - тезис, проблема - антитезис, программа - синтез.
Эта триада впервые вводит термин «программа», и именно эта триада задает условия существования и цель (цель) программы. Поэтому эту триаду целесообразно назвать триадой целевого назначения программ. Цель программы заключается в том, что они являются средствами развязку определенных проблем пользователя.
В этой триаде развития можно говорить об аналогии между введенными понятиями и такими категориями гносеологии, как «субъект - цель (цель) - средство». Иначе говоря, можно говорить о том, что понятие пользователя, проблемы и программы есть программологическими проекциями в соответствии с категориями субъекта, цели и средства.
Понятие программы тесно связано с понятием языка . дескрипции могут трактоваться как предложение языка, функции - как значение предложений. Поэтому способы представления программ могут рассматриваться как определенные языки, называют языками программирования.
Для исследования таких искусственных языков можно использовать лингвистику, которая была развита для естественных языков. Вместе с тем есть определенные различия между естественными языках и языках программирования, которые сформулируем в таблице 1.
Таблица 1-Сходство и различия в языках
|
№ |
Характе- ристика языка |
Природный язык |
Языки программирования |
|
1 |
Происхождение |
. Естественные языки появились в результате исторического развития определенной группы людей |
Языки программирования являются искусственными языками. |
|
2 |
Основные аспекты |
Естественные языки имеют много основных аспектов, таких как коммуникативный, когнитивный, референциальный, сигнификативний, экспрессивный, лечебный и т.д. |
Основных аспектов немного, но они достаточно точные определения. |
|
3 |
Точность определения языка |
Точных определений нет, есть разные модели. Языка многозначны. |
Языки программирования, как правило, точно определены. Язык однозначна. |
|
4 |
Открытость |
Язык постоянно расширяется |
Язык фиксированный |
Как видим, языки программирования значительно проще и беднее естественные языки. Но это дает возможность более точно описать языка программирования. Однозначность языков программирования важна при создании соответствующих систем программирования и при исследовании программ.
Язык программирования - это знаковая система для описания алгоритмов программ, ориентированных на конкретных исполнителей (прежде всего ЭВМ).
Знаковая система состоит из трех компонентов:
1) правила, описывающие синтаксис;
2) правила, задающие семантику синтаксически правильных конструкций;
3) правила, формирующие прагматику синтаксически правильных конструкций.
Языки программирования являются искусственными языками, специально созданными для записи программ. В отличие от естественных языков, которые являются многоаспектными, неоднозначными, открытыми, относительно быстро меняются, искусственные языки значительно беднее, от них требуют фиксированности смысла и однозначности[4].
Синтаксический аспект является одним из основных аспектов программ. По определению, он связан с формами представления программ в абстракции от других их аспектов.
Семантический аспект
программа -
единство существенных аспектов, синтаксис тесно связан с другими аспектами программ
В теории формальных языков
синтаксический аспект изучается в абстракции от других аспектов
Синтасический аспект
...
...
...
...
Синтаксический аспект
Рисунок 1- Абстрагирования синтаксического аспекта от других аспектов программ
Момент абстракции синтаксического аспекта от других аспектов программ является очень важным. Это означает, что на первом этапе развитие синтактики - науки о синтаксический аспект - определяется главным образом лишь отношением знаков между собой. (См. Рис. 1). Вместе с тем не следует абсолютизировать этот момент абстрагирования от других аспектов, потому что на втором этапе синтаксис программ должен быть согласован с другими их аспектами. Приведенные утверждения сформулируем как принцип абстрагирования и единства синтаксического аспекта с другими аспектами программ.
Уточнение синтаксического аспекта искусственных языков осуществляется на основе понятия формального языка. Как уже говорилось, это абстрактное понятие, отражающее первые (синтаксические) характеристики речи. Поэтому термин «формальный» понимается не только как «точно заданный», но и как «абстрактный»[5].
Хотя синтаксический аспект связан со многими аспектами программ, тесная связь есть с семантическим аспектом. Остановимся на связи подробнее. Синтаксический и семантический аспекты являются дальнейшей конкретизацией (проекцией) категорий формы и содержания. Чтобы зафиксировать эти положения в явной форме, сформулируем их в виде следующего принципа синтактики.
Принцип отделения, подчинения и единства синтаксического и семантического аспектов: синтаксический аспект программ является производным от семантического, он сначала изучается в абстракции от семантического аспекта, а затем - в единстве с ним.
Приведенный принцип фактически указывает лишь на отношение синтаксического аспекта к семантическому, но не дает никакой характеристики синтаксическом аспекта. Следующий этап конкретизации заключается в том, что будем уточнять синтаксический аспект с помощью понятия формального языка. Элементы, которые задаются формальным языком, будем называть предложениями. Отметим, что здесь можно было бы принять вместо термина «предложение» термины «слово», «текст», или другие термины, характеризующие основные структурные элементы языка; этот выбор зависит от целевой направленности исследования.
Принцип теоретико-множественного толкования формального языка: на самом высоком уровне абстракции синтаксический аспект программ представляется в виде формального языка, которая толкуется как множества предложений.
Отметим, что этот принцип намечает определенное различие между семантикой, которая толкуется в теоретико-функциональном смысле, и синтаксисом, для которого более адекватной является теоретико-множественная формализация[6].
Итак, первая над-абстрактная модель языка - это некоторое множество L = {si | iI}. На этом уровне абстракции ничего кроме теоретико-множественных понятий нет, поэтому нет и собственно теории языков (а есть теория множеств). Надо переходить на другой уровень абстракции, который имеет хотя бы некоторые специфические характеристики языков. Этот переход, как известно из диалектической логики, является переходом от целого к частям. Здесь главное - выделить структуру, связывает целое с частями. Чтобы это сделать, надо конкретизировать структуру.
Структура последовательности используется и в естественных языках, например, печать текста на клавиатуре порождает именно последовательность букв. Кроме того, устные разговоры фактически определяют последовательности фонем. Принцип толкования предложений языка как последовательностей: на следующем уровне абстракции предложения рассматриваются как последовательность букв определенного алфавита. Определено, что здесь абстрагируемся от порядка построения цепочек. Например, можно было бы различать цепочки (ab) c и a (bc). Этот уровень рассмотрения будем обозначать как L.SS (Language is a Set of Sequences) .Наведени соображения и постулаты позволяют ввести следующую математическую модель формального языка.
Абстрактная модель формального языка - это некоторое подмножество L A*, где A * - конечные последовательности букв из алфавита A. Это фактически является определенным абстрактным понятием формального языка. Связь моделей задается операцией абстрагирования absL, которая является операцией перевода множества в множество с инкапсуляцией структуры последовательности предложений. .На данном уровне абстракции исследуют теоретико- множественные операции и операции над последовательностями. Вместе с тем такие операции слишком бедны и не раскрывают особенностей синтаксического аспекта. Вызвано это тем, что мы абстрагировались от способа, которым задается речь.
Третья модель наследует свойства первой модели с добавлением новой характеристики - механизма порождения речи. Такой механизм можно называть порождающей дескриптивной системой языка. Дуальный к порождению механизм - восприятие языков. Такое распределение является традиционным для лингвистики, где выделяют говорящего (порождение), и того, кто слушает (восприятия). Такие же механизмы есть и для программ: программисты порождают программы, исполнители (в частности, компьютеры) - их воспринимают. Также, появляется новый элемент понятия формального языка - языковая дескриптивная система. Опять-таки, для определения этой системы будем двигаться от абстрактного к конкретному[7].