Как происходит отслеживание свободного экстента? |
Основы структуры программ
3.3. Языки программирования, естественные языки
Нотация, определяющая синтаксис и семантику программ, называется языком программирования. Существует множество языков программирования, служащих различным целям. Язык, использованный в этом курсе, называется Eiffel (Эйфель).
Языки программирования являются искусственными творениями. Называя их языками, мы предполагаем возможность их сравнения с естественными языками, подобных английскому или русскому. Языки программирования обладают некоторыми общими чертами со своими двоюродными братьями.
- Общая организация текста в виде последовательности слов, состоящих из символов. Точка есть точка, как в Eiffel, так и в английском и в русском языках.
- И в естественных, и в искусственных языках синтаксис языка, определяющий структуру текста, отличается от семантики, определяющей смысл.
- Доступны слова с предопределенным смыслом, такие, как "the" в английском и "do" в Eiffel. Наряду с этим есть возможность определять собственные слова, как это делал Льюис Кэролл в "Алисе в Зазеркалье": "Варкалось. Хливкие шорьки пырялись по наве…", так же, как это делали мы, назвав наш первый класс PREVIEW именем, не имеющим специального смысла в Eiffel.
- java
Вполне возможно назвать класс именем "Шорек", а его метод – "Варкалось". Правда, такие имена идут вразрез с правилами стиля.
Создание имен – это общая, без конца возникающая необходимость в языках программирования. В естественных языках вам не приходится изобретать новые слова, если только вы не поэт, не ребенок и не ботаник, специализирующийся на флоре бассейна Амазонки. Программист, внешне выглядящий вполне взрослым и не имеющий никакого отношения к цветкам из Амазонки, может в течение дня придумать несколько десятков новых имен.
- Eiffel усиливает аромат естественного языка, преобразуя слова английского языка в свои ключевые слова. Каждое ключевое слово Eiffel является одним общеиспользуемым словом английского языка.
Некоторые языки программирования предпочитают использовать аббревиатуры, такие как int вместо INTEGER. Мы предпочитаем для ясности использовать полные слова. Единственным исключением является термин elseif, составленный из двух слов.
- Рекомендуется всюду, где это возможно, использовать слова из английского или родного языка с содержательным смыслом для определяемых вами имен, как это делали мы в построенных до сего момента примерах: PREVIEW, display, или Route1.
Схожесть языков программирования и естественных языков полезна, поскольку способствует пониманию программ. Но не стоит заблуждаться – языки программирования отличаются от естественных языков. Они являются искусственными нотациями, спроектированными для решения специфических задач. В этом их сила и слабость.
- Выразительная сила языков программирования неизмеримо мала в сравнении с любым естественным языком даже на уровне ребенка четырех лет. Языки программирования не позволяют выражать чувства или мысли. Они лишь могут позволить определить объекты, представимые в компьютере, и задачи, выполнимые над этими объектами.
- Проигрывая в выразительности, языки программирования выигрывают в точности. Текст на естественном языке грешит двусмысленностями и открыт для множества интерпретаций, что придает ему некоторое обаяние. Когда же мы общаемся с компьютером, задавая программу действий, нельзя позволить себе приблизительности, мы ожидаем строго определенных результатов. Синтаксис и семантика языка программирования должны быть определены совершенно строго.
Почувствуй стиль
Естественные языки в ваших программах
Естественному языку отводится важная роль в программах: в комментариях. Мы уже говорили, что любой программный текст, начинающийся с двух тире "--" и вплоть до конца строки, является комментарием. В отличие от остального программного текста, комментарии не следуют точным правилам синтаксиса, поскольку они не участвуют в выполнении программы и, следовательно, не имеют семантики. Комментарии объясняют программу, помогая людям лучше понять ее смысл.
Естественные языки служат основой построения идентификаторов, в частности, имен классов и методов. Методологический совет: используйте полные, содержательные имена, такие как METRO_LINE для имени класса. Аббревиатуры следует применять только в тех случаях, если они используются в естественном языке.
Называя наши нотации "языками", мы оказываем им не вполне заслуженную честь – они скорее представляют расширенную версию математической нотации, используемой для записи формул.
Термин "код", означающий текст в языке программирования, отражает этот факт. Он используется в выражении "Строка кода", как в тексте "Windows Vista содержит более 50 миллионов строк кода". Мы иногда называем процесс программирования кодированием, подчеркивая этим немного уничижительным термином, что речь идет о процессе низкого уровня, исключающего проблемы проектирования, как, например, в данной фразе: "Они думают, что все идеи уже высказаны, и все, что остается, – это простое кодирование". "Кодировщик" – уничижительное название программиста.
И все же, языки программирования имеют собственную красоту, которую, я надеюсь, вы сумеете ощутить в процессе обучения. Если вы начнете думать о ваших отношениях с любимой в терминах relationship.is_durable (отношение.является_прочным) или пошлете родителям SMS: Me.account.wire (month.allowance + (month+1).allowance + 1500, Immediately) (Мне.счет. телеграфируй (месяц.карманные_расходы + (месяц +1).карманные_расходы + 1500, срочно), то это значит:
- вы твердо усвоили концепции;
- следует отложить курс и отдохнуть пару недель.
3.4. Грамматика, категории, образцы
Для описания синтаксиса естественного языка – структуры текстов – лингвисты задают грамматику языка. Для простого предложения типичная грамматика скажет нам, что это частный случай (мы говорим "образец") некоторой "категории", называемой в грамматике: "Простое_глагольное_предложение". Предложение состоит из трех компонентов, каждый из которых является образцом некоторой категории:
Анна звонит друзьям
- субъект действия: Анна, образец категории "Существительное";
- действие, описываемое в предложении: звонит – образец категории "Глагол";
- объект действия: друзьям – еще один образец "Существительного".
Ровно эти же концепции будут применяться для описания синтаксиса языков программирования. Например:
- категорией в грамматике Eiffel является Class, описывающий все программные тексты классов, которые кто-либо может написать;
- частные случаи текста классов, как класс PREVIEW или класс TOURISM, являются образцами категории Class.
В лекции 11 мы в деталях опишем синтаксис языка. Сейчас же достаточно ограничиться определением.
Определения: грамматика, категория, образец
Грамматика языка программирования – это описание его синтаксиса.
Категория (грамматическая) – элемент грамматики, описывающий некоторую категорию возможных синтаксических элементов в соответствующем языке.
Образец категории – это синтаксический элемент.
Отметим соотношение между категорией и образцом. Категория задает тип синтаксического элемента, образец является экземпляром этого типа. Так:
- в обычной грамматике мы можем иметь грамматические категории существительного и глагола. "Анна" является образцом существительного, "звонит" – образец глагола;
- в грамматике Eiffel мы можем иметь категории: Class и Feature. Любой текст класса является образцом категории Class, текст метода является образцом категории Feature.
Для имен, задающих категории элементов, будем использовать специальный стиль, чтобы отличать их от элементов программы.
3.5. Вложенность и структура синтаксиса
Синтаксическая структура программного текста допускает несколько уровней образцов. Класс является образцом, это же верно и для части класса – оператора, и для имени метода. Языки программирования поддерживают возможность встраивания одних образцов в другие, технический термин – вложенность (nesting). Например, класс может содержать несколько методов, методы могут содержать операторы, те, в свою очередь, содержат выражения. Вот пример вложенной структуры образцов для ранее приведенного класса. Для простоты оставлены только два оператора и класс назван PREVIEW1, чтобы отличать его от полной версии:
Встроенные прямоугольники подсвечивают вложенные образцы. Самый внешний прямоугольник задает объявление класса, содержащее наряду с другими образцами объявление метода, частью которого является тело метода, содержащее два оператора, и так далее.
Некоторые элементы синтаксиса, такие как точка и ключевые слова class, do, end, играют роль разделителей и сами по себе не несут семантического смысла. Мы не рассматриваем их как образцы.
Убедитесь, что вы понимаете представленную здесь синтаксическую структуру.