2. Какая разница между ассемблером и компилятором?
3. Императивную парадигму программирования можно кратко охарактеризовать, просто сказав, что она делает акцент
на описании процесса, который ведет к решению поставленной задачи. Дайте аналогичное краткое описание декларативной,
функциональной и объектно-ориентированной парадигм программирования.
4. В каком смысле языки программирования третьего поколения являются языками более высокого уровня, чем языки
предыдущих поколений?
5.2. КОНЦЕПЦИИ ТРАДИЦИОННОГО ПРОГРАММИРОВАНИЯ
В этом разделе мы рассмотрим некоторые основные концепции, положенные в основу императивных и объектно-
ориентированных языков программирования. Для этого рассмотрим примеры программ на языках Ada, С, C++, FORTRAN,
Java и Pascal. FORTRAN, Pascal и С – императивные языки программирования третьего поколения, тогда как C++ – объект-
но-ориентированный язык, который является расширением языка С. Java – это объектно-ориентированный язык, производ-
ный от С и C++. Язык Ada изначально был разработан как императивный язык третьего поколения, обладающий многими
объектно-ориентированными свойствами. Однако более поздние версии этого языка больше соответствуют объектно-
ориентированной парадигме, чем императивной.
В приложении Г содержится краткое описание каждого из этих языков программирования, дополненное примером того,
как алгоритм сортировки по методу вставки может быть реализован в каждом из них. Вы можете обращаться к этому прило-
жению по мере чтения данного раздела. Помните, однако, что в данном случае наша цель – понять основные свойства язы-
ков программирования. Приводимые здесь примеры предназначены просто для иллюстрации того, как обсуждаемые функции
практически реализуются в существующих языках программирования, поэтому вам не следует слишком углубляться в их рас-
смотрение.
Операторы в языках программирования обычно подразделяются на три категории: операторы объявления, выполняе-
мые операторы и комментарии. Операторы объявления (declarative statements) задают способ представления, тип и структуру
данных, которые в дальнейшем будет использоваться в программе. Выполняемые операторы (imperative statements) описы-
вают шаги применяемого алгоритма, а комментарии (comments) повышают читабельность программы, поясняя ее специфи-
ческие особенности в более удобной для пользователя форме. Этот раздел мы начнем с изучения понятий, связанных с опе-
раторами объявления, затем перейдем к обсуждению выполняемых операторов и закончим рассмотрением примера доку-
ментирования программы.
Переменные, константы и литералы. В разделе 5.1 говорилось о том, что языки программирования высокого уровня
позволяют обращаться к ячейкам памяти через символьные имена, а не через числовые адреса. Такие имена называются пе-
ременными (variable), тем самым подчеркивается тот факт, что при изменении значения, хранящегося в ячейке памяти, изме-
няется и значение, присвоенное переменной.
Однако иногда в программе необходимо использовать фиксированное, заранее определенное значение. Например, про-
грамма управления воздушными полетами в окрестности некоторого аэропорта может содержать многочисленные ссылки на
высоту аэропорта над уровнем моря. При создании подобной программы можно конкретно указывать это значение (скажем,
645 футов), когда оно потребуется. Такое явное указание конкретного значения для данных называется литералом (literal).
Использование литералов приводит к появлению в программах операторов, подобных приведенному ниже:
EffectiveAlt ← Altimeter+645,
где EffectiveAlt и Altimeter являются переменными, а значение 645 – литералом.
Как правило, применение литералов не считается лучшим стилем программирования, поскольку они затрудняют пони-
мание тех выражений, в которых используются. Например, как читающий программу сможет узнать, что именно означает
число 645? Кроме того, литералы могут усложнить модификацию программы, когда это станет необходимым. Если потре-
буется использовать данную программу управления воздушным движением для другого аэропорта, то значение высоты аэ-
ропорта над уровнем моря придется изменить. Если в программе для ссылки на эту высоту используется литерал 645, то
каждую такую ссылку в программе нужно найти и изменить. Задача еще более усложнится, если окажется, что литерал 645
в некоторых случаях представляет также и другую величину, а не только высоту аэропорта над уровнем моря. Как тогда уз-
нать, какой из литералов следует изменить, а какой оставить неизменным?
Традиции в языках программирования. Как и при использовании естественных языков, пользователи различных
языков программирования стремятся выработать собственные традиции, отличающие их от остальных программистов,
и часто вступают в дебаты по поводу преимуществ, присущих, по их мнению, тем воззрениям, которых они придержи-
ваются. Иногда отличия могут быть очень существенными, особенно при использовании различных парадигм, в других
же случаях они оказываются совершенно незначительными. Например, несмотря на различия, существующие между
процедурами и функциями (подробно о них рассказывается в разделе 5.3), пользователи языка С называют оба конст-
рукта функциями. Происходит это по той причине, что в языке С процедура рассматривается как функция, не возвра-
щающая никакого значения. Аналогичный пример можно привести в отношении пользователей языка C++, которые
ссылаются на функции, входящие в состав объектов, как на функции-члены, тогда как в объектно-ориентированной па-
радигме для них используется термин "метод". Это расхождение имеет место по той причине, что C++ был разработан
как расширение языка С.
Другим примером подобных расхождений является то, что в программах на языках Pascal и Ada зарезервированные
слова принято выделять полужирным шрифтом, тогда как пользователи языков С, C++, Fortran и Java не придержива-
ются этой традиции.
Текст этой книги выдержан в нейтральном стиле благодаря использованию классической терминологии, применяемой
теоретиками. Однако каждый конкретный пример представлен в форме, совместимой с традициями данного языка. Встретив
подобный пример, читатель должен помнить, что это всего лишь образец того, как теоретические идеи реализованы в реаль-
ном языке программирования, и он вовсе не предназначен для обучения читателя особенностям работы с тем или иным язы-
ком программирования.