Программирование для гуманитариев

Парадигмы программирования

Разбить на страницы
Показывать лекцию целиком

Цель лекции:

  • Познакомить читателей с основными парадигмами программирования, применяемых в современном программировании;
  • Научить читателей программировать, читать алгоритмы, создавать программы, на языках программирования, входящих в процедурную парадигму;
  • Научить правильной записи алгоритмов на языках, входящих в процедурную парадигму.
  • 3.1. Введение. Общие сведения о парадигмах

    Общие сведения о парадигмах программирования

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

  • 1957г., процедурная парадигма, язык ФОРТРАН, создатель Бэкус;
  • 1967г., функциональная парадигма, язык ЛИСП, создатель Маккарти;
  • 1970г., структурированная парадигма, язык ПАСКАЛЬ, создатель Вирт;
  • 1974г., логическая парадигма, язык ПРОЛОГ;
  • 1983г., объектно-ориентированная парадигма, пример - язык C++, создатель Страуструп.
  • В конце списка представлены языки программирования и их создатели, внесшие значительный вклад в популяризацию этих парадигм.

    В процессе своего развития эти парадигмы "мутировали", "отпочковывались", "объединялись" (так, язык Си объединил в себе процедурную и структурированную парадигму). В результате этих "мутаций" по состоянию на 01.06.2008 года оформились следующие парадигмы программирования:

  • Процедурная (или модульная) парадигма;
  • Логическая парадигма;
  • Объектно-ориентированная парадигма.
  • Эти три совершенно разные по подходу парадигмы составляют основу современного программирования. Хотя в настоящее время наиболее "модной" является объектно-ориентированная парадигма, остальные парадигмы также используются на практике и изучаются в ВУЗах. Их мы и рассмотрим ниже.

    Кроме деления языков программирования по парадигмам, существует также деление языков на "императивные" и "декларативные".

    Императивными называются такие языки программирования, в которых описываются в основном "инструкции" по пошаговому выполнению алгоритмов. Все внимание в них отводится лишь реализации этой последовательности действий, а данным и их структуре отводится второстепенная роль. Примером такого рода языков может служить языки создания драйверов устройств: Assembler и C++. При использовании этих языков мы не знаем, какие данные будет отправлять/получать устройство, но зато мы знаем, какие действия нужно осуществить над данными.

    Декларативными называются языки программирования, в которых алгоритм работы с данными "зашит" в языке программирования, а сама программа представляет собой данные, упорядоченные и структурированные таким образом, что их легко обрабатывают "стандартные" алгоритмы вывода. В декларативных языках как бы "нет разницы" между данными и алгоритмом, их обрабатывающим. От "значения" данных, подаваемых на вход программы, зависит дальнейшее направление расчетов. Примерами декларативных языков могут служить языки: LISP и Prolog. И программа, и данные на языке ЛИСП представляют собой "списки" вместе с функциями, выполняемыми над ними. На языке ПРОЛОГ есть условное разделение программы на данные ("факты") и код ("правила", "продукции"). Но это разделение достаточно условно: и факты, и правила имеют одну и ту же форму записи.

    Декларативные языки лучше всего использовать в случаях, когда "данные управляют программой": при написании экспертных систем, при конструировании трансляторов с языков программирования, для большинства задач искусственного интеллекта. Именно там их использование приведет к наибольшей эффективности.

    3.2. Процедурная парадигма

    Эта парадигма является самой "древней" и, одновременно, - самой простой в реализации и обучении программирования. На основе этой парадигмы изучаются языки программирования в школе. И поэтому, вполне естественно, автор поставил ее на первое место.

    3.2.1. История возникновения парадигмы

    "Истоки" процедурной парадигмы программирования лежат в далеких 50-х годах прошлого века. После появления ЭВМ с архитектурой "фон Неймана" появилась возможность компьютеру "самому", без участия человека, проводить сложные вычисления. Эти годы и стали переломными в становлении профессии "программист". Чтобы произвести сложные вычисления, нужно сначала написать сложный алгоритм. Поскольку сложный алгоритм трудно реализовать в ЭВМ так же, как на калькуляторе, появилась необходимость в "записи" алгоритмов на более "понятном" человеку языке, чем язык машинных кодов ЭВМ. Так, вначале появился язык ассемблера, представляющий машинные коды в "удобочитаемом" виде.

    В 1957 году Бэкус разработал первый язык высокого уровня: ФОРТРАН. Эта аббревиатура переводится как: "FORmula TRANslator", - переводчик формул. Как следует из его названия, его назначение - это числовые вычисления. С помощью этого языка можно было "кодировать" численные алгоритмы, не вдаваясь в архитектуру ЭВМ, количество регистров в ее процессоре, особенности ее функционирования, и другие, "не важные" для прикладного программиста вопросы. Вскоре, в начале 60-х годов прошлого века, появился язык: "COBOL", - язык, предназначенный для коммерческих вычислений. Аббревиатура "COBOL" расшифровывается как: "COmmon Business Oriented Language" - "язык, ориентированный на общий бизнес".

    В реализации этих языков была предусмотрена (как и в ассемблере) возможность "разбивки общего алгоритма" на несколько независимых модулей: "процедур". "Нанизывая" процедуры в основном модуле программы, как гирлянды на нитку, можно получить алгоритмы любой сложности. В этом и состоит преимущество процедурного программирования.

    Таким образом, возникла "процедурная парадигма", гласящая:

    "Реализацию алгоритмов вычислений необходимо создавать с помощью мелких, не зависимых друг от друга процедур, которые вызывают друг друга в соответствии с логикой программы".

    Эта парадигма проста не только в "написании" алгоритма, но и его отладке: нужно убедиться в "работоспособности" каждого из модулей, что намного проще, чем отладка всего алгоритма целиком.

    3.2.2. Языки, поддерживающие парадигму

    Среди языков, поддерживающих процедурную парадигму программирования, используются следующие языки программирования:

  • Ассемблер;
  • Фортран;
  • Кобол;
  • Алгол;
  • PL 1;
  • Бейсик;
  • Си;
  • Паскаль;
  • Perl;
  • VB Script;
  • Jscript;
  • Multi Edit Macro Script;
  • MS-DOS Command Shell;
  • NDOS Shell;
  • Bash shell;
  • tc shell;
  • REXX;
  • язык SQL-запросов;
  • и др.
  • Все они поддерживают создание "модулей" - функций и подпрограмм, которые разрабатываются и тестируются независимо, и осуществление "вызовов" между ними.

    3.2.3. Представление программ и реализация вычислений

    Прежде, чем передать код программы на обработку компилятору, программист должен соответствующим образом оформить код программы. В этом разделе даются общие правила оформления кода программы на разных языках программирования.

    3.2.3.1. Quick Basic

    В языке Quick Basic есть следующие правила оформления программ:

  • Программа на языке Quick Basic находится в файле с расширением "*.bas";
  • Основная программа начинается с первого ее оператора;
  • Желательно "нумеровать" все строки файла метками - натуральными числами. Нумерацию строк желательно начинать с числа 10 и задать шаг нумерации тоже 10;
  • Заканчиваться вычисления в программе должны оператором: " STOP ";
  • Завершаться описание всех алгоритмических конструкций в программе необходимо оператором: " END ";
  • На каждый оператор выделяется одна строка;
  • Комментарии к строкам алгоритма должны начинаться отдельной строкой, после ключевого слова: " REM ", которые указываются сразу после метки (или вместо метки);
  • Подпрограммы на языке: "Quick Basic", оформляются отдельно, внутри файла;
  • Оформление подпрограмм начинается с ключевого слова: " SUB ", за которым идет имя подпрограммы;
  • Выполнение программы на языке "Quick Basic", открытой в его оболочке ("qbasic.exe"), начинается после выбора меню: "Run" -> "Continue", или нажатием клавиши: "F5".
  • 3.2.3.2. C/C++

    На языке Си и, частично, С++, существуют следующие правила оформления программ:

  • Программа на языке Си находится в файле с расширением: "*.c", а на языке C++ - с расширением "*.cpp";
  • Файлы с "заголовочной частью" к основной программе находятся в файлах с расширением "*.h" и "*.hpp";
  • Основная программа (которая затем будет запускаться по имени файла, например, "myprog.exe"), должна иметь имя и расширение "myprog.c". То есть, в общем случае, имя основного файла проекта - "<имя проекта>.c" (для программ на Си) или "<имя проекта>.cpp" (для программ на языке С++), где <имя проекта> будет соответствовать имени Вашей программы после компиляции;
  • Файл с программой начинается с включения (в заголовочной части) файлов с расширением "*.h" и "*.hpp", с помощью прагма оператора: " include ". При этом имена заголовочных файлов, находящихся в одном каталоге с файлами-описаниями алгоритма, заключаются в кавычки, а имена файлов, пути к которым прописаны в переменной операционной системы: " INCLUDE ", заключаются между знаками: "<…>", например:
  • #include <stdio.h>
  • #include "myprog.h"
  • Далее в файле с основной программой задается основная функция алгоритма: " main ", - управляющая вызовом всех остальных функций и подпрограмм.Примечание: при программировании на языке Си с использованием библиотеки Windows API основной функцией алгоритма становится функция: WinMain. Подробнее об этой функции смотри [89].
  • Функция " main " из пункта 5 может возвращать целое значение (тип "int"). Это значение впоследствии используется при запуске функции внутри командного файла оболочки операционной системы, для его реакции на неудачный результат работы этой функции. Принято, что в случае успешного результата своей работы функция " main " возвращает нулевой результат.
  • Функция " main " может принимать в качестве аргументов следующие формальные параметры:

    main( int argc, char *argv[], char *env[]), где

  • argc - число аргументов у функции. Эта переменная принимает значение 1 в случае отсутствия опций и параметров, 2 в случае присутствия одного параметра и т.п.;
  • *argv[] - массив символьных переменных - указателей на опции и аргументы программы, запускаемой из командной строки. При этом элементу "0" соответствует полное путевое имя файла с запускаемой программой. Элементам с номерами: "1" - "argc-1" соответствуют аргументы программы, набранные в командной строке, с соответствующими номерами (по-порядку);
  • *env[] - массив символьных переменных - указателей на системное окружение операционной системы, в которой запускается скомпилированная программа.
  • Комментарии на языках: "Си" и "С++" обозначаются следующим образом:
  • Игнорирование конца строки вслед за комментарием: "//" ;
  • Игнорирование текста внутри "скобок" - спецсимволов: "/* … */".
  • Тексты-описания функций и процедур на языке: "Си" располагаются либо после описания функции " main ", либо в отдельных файлах (с расширениями: "*.C" и "*.CPP" соответственно для функций "Си" и "С++").
  • В "заголовочных файлах" (с расширением: "*.h" и "*.hpp") задаются, во-первых, директивы компилятору на обработку файлов, во-вторых, макрофункции и макроподстановки, в-третьих, определения констант и глобальных переменных в программе, и, в-четвертых, объявления функций. Формат описания заголовочной части смотри в приложении I к данной лекции и в книге [31].
  • Перед запуском программы, написанной на языках Си и С++, необходимо сначала "скомпилировать" модули и "построить", скомпоновать (" Build ") проект в IDE (с именем: "<имя проекта>" ), а затем запустить ее, либо набрав в командной строке: <имя проекта>.exe {<опции>}*, либо щелкнув на иконке этой программы (в Windows).
  • Подробнее о других аспектах программирования на C/C++ смотри: [31, 51, 92,78]

    3.2.3.3. Perl

    В языке Perl существуют следующие правила оформления программных модулей:

  • Программа на языке Perl находится в файле с расширением: "*.pl".
  • Начинаться программа должна с директивы компилятору, имеющей следующий синтаксис:
    #!<путь к интерпретатору Perl> {<опции>}

    Например:

    #!/usr/bin/perl
  • для интерпретатора perl в UNIX, и
    #!perl -w
  • для интерпретатора perl в Windows. Опция -w означает: "включить отладку сценариев"
  • Основная программа начинается с первого ее оператора, а заканчивается - концом файла или оператором описания функций " sub ".
  • Комментарии на языке Perl обозначаются как: "#". Все символы, набранные после этого знака, игнорируются интерпретатором.
  • Описание подпрограмм и функций начинается со слова " sub ", после которого идет блок с операторами. Подпрограмма завершается при выходе из этого блока:
    sub <имя функции> {<тело функции>}
  • Вызов подпрограммы осуществляется следующим образом:
    [<переменная>=] '<имя функции> [(<аргументы>)]
    где <переменная> - присвоенное значение-результат работы функции; <имя функции> - имя, зарезервированное в 3.4. Аргументами могут быть строковый литерал либо ссылка:
    <аргументы> ::= {<литерал>|\<имя фактического параметра>}+
  • Объявление процедур осуществляется либо сразу же после основной функции, либо в отдельном файле-библиотеке (расширение - "*.pl") или модуле (расширение - "*.pm"). Подробнее о реализации библиотек и модулей см. [59]. Стандартные же шаблоны оформления модулей и библиотек см. в [приложении App03002].
  • Доступ к аргументам (как основной программы, так и функций) осуществляется через переменную: " @_ ".
  • Программа ("макрос", "скрипт") на языке Perl может выдавать целое значение при выходе из нее (с помощью функции: " exit( <целое число> ) "). По "джентльменскому соглашению" программа возвращает "0" в случае своего нормального завершения.
  • Для запуска макросов в командной строке необходимо набрать:
    perl <полное имя макроса> {<аргументы>}
    где <полное имя макроса> - имя программы (с расширением: "*.pl") вместе с его путевым именем; <аргументы> - передаваемые программе аргументы-значения.
  • Примечание. Если в качестве аргументов используются имена файлов, необходимо указывать их полные путевые имена. Примечание. В приложении III к данной лекции представлены тексты командных файлов Windows, с помощью которых можно "облегчить" выполнение сценариев на Perl, указывая не абсолютные путевые, а "относительные" имена файлов. Инструкция к ним прилагается.

    3.3. Резюме процедурной парадигмы

    В данной лекции Вы познакомились с процедурной парадигмой и ее реализациями на языках Quick Basic, Си/C++ и Perl. В приложениях и пунктах для самостоятельной работы Вы легко разберетесь с особенностями программирования на языках оболочек операционных систем: MS-DOS Command Shell и BASH shell Linux. Теперь Вы, по крайней мере, можете записать "шапку" с заголовочной частью для указанных языков программирования и сценариев. Собственно записью конструкций алгоритмов мы займемся в следующей лекции.

    3.4. Для самостоятельного изучения

  • Прочтите разделы из [4, 80-83, 84, 85], посвященные синтаксису и семантике командных файлов MS-DOS;
  • Прочтите разделы из [80-83], а также онлайновое руководство по Norton Utilities for DOS, посвященные синтаксису и семантике командных файлов NDOS. Для этого Вам, может быть, потребуется установить Norton Utilities 8.0 Rus из архива;
  • Прочтите разделы из [66] и, у кого есть возможность, справочные файлы к Core Utile bash-shell Linux.
  • Просмотрите текст, приведенный в приложении к данной лекции.
  • 3.5. Глоссарий

    Термин Англ. Термин Разъяснение
    программирование 1. programming 1. Раздел прикладной математики, изучающий и разрабатывающий методы и средства составления, проверки и улучшения программ на ЭВМ.
    программирование 2. programming 2. Процесс подготовки задач для их решения на ЭВМ. Включает следующие этапы: во-первых, поиск алгоритмического решения, во-вторых, составление программы на языке ЭВМ, в-третьих, трансляция с языка программирования на машинный язык.
    алгоритмическое решение algorithmic decision Получение алгоритма решения задачи. Теоретической основой поиска этого решения занимается наука алгоритмика.
    составление (программ) building (of program) То же, что и кодирование.
    кодирование (программ) coding (of program) Составление (запись) алгоритма на одном из языков программирования.
    трансляция (программы) translation (of program) Перевод инструкций (операторов) языка программирования ЭВМ в ее машинные коды. Трансляцию выполняют специальные программы-трансляторы: компиляторы и интерпретаторы.
    машинный код code of machine Двоичный код (цифры), в котором специфичным для данной ЭВМ правилам кодируются данные и программы, посылаемые ей на исполнение.
    программа program Полное и точное описание на некотором формальном языке предназначенных к выполнению работ, с учетом всех обстоятельств, общих целей и условий, на основании ранее найденных алгоритмов и имеющихся средств ЭВМ. Текст программы является официальным ее документом.
    текст программы text (of program) Последовательность операторов языка программирования, на котором написана программа. Текст является официальным документом ЕСПД в проекте.
    язык (программирования) programming language Формальный язык, состоящий из переменных, операторов, операций и других синтаксических конструкций, применяемых для описания информации (данных) и алгоритма (программы) для их отображения на ЭВМ.
    оператор (языка программирования) operator (of programming language) Предписание в данном языке программирования, предназначенное для задания некоторого завершенного действия в процессе обработки информации на ЭВМ.
    парадигма программирования paradigm (of programming) Совокупность правил, концепций, взглядов, стандартов, "моды", по которым в то или иное время пишутся программы программистами. Выбор парадигмы однозначно определяет язык программирования, синтаксис и описание различных конструкций (операторов) этого языка, использование и представление структуры данных, стандарты в написании программ и комментариев. Наиболее востребованными в настоящее время являются следующие парадигмы: процедурная (или модульная), функциональная, структурированная, логическая, объектно-ориентированная (ООП), хотя существуют и другие парадигмы.
    структура данных data structure Упорядоченное множество элементов данных, не зависящее от их физической реализации, вместе с "разрешенными" операциями над этими данными. Примерами структуры данных могут служить база данных, база знаний, формат файлов для приложений, документ XML, язык разметки, графический файл и т.п. Н. Вирт предложил формулу: "программа" := "алгоритм" + "структура данных".
    процедурная парадигма procedural paradigm Парадигма, гласящая: "Реализацию алгоритмов вычислений необходимо создавать с помощью мелких, не зависимых друг от друга процедур, которые вызывают друг друга в соответствии с логикой программы". На структуру данных ограничения не накладываются (программа управляет данными).
    модульная парадигма modular paradigm см. процедурная парадигма
    структурированная парадигма structural paradigm Развитие идей модульной парадигмы, гласящее следующее: "Каждая подпрограмма должна иметь ограниченный объем, выполнять одну специфичную функцию для обработки данных и использовать только три базовых элемента алгоритма: линейную, ветвящуюся и циклическую структуру". Основная цель структурированного программирования - создание программы с минимальными взаимосвязями модулей.
    объектно-ориентированная парадигма object-oriented paradigm Парадигма, ориентированная на работу с "объектами" и "сообщениями". Объект - это пакет информации (структурированные данные) вместе с описанием процедур ("методов") манипулирования ими, а сообщение - это условие одного из методов. В отличие от модуля процедурной парадигмы, сообщение только определяет, что желает выполнить отправитель сообщения, а получатель точно определяет, что должно произойти.
    логическая парадигма logic paradigm В этой парадигме в качестве "единого алгоритма" вычислений является алгоритм символьной логики, управляющий всеми операциями с данными. Все языки в этой парадигме являются декларативными языками.
    императивные языки imperative languages Языки программирования, в которых "код управляет данными". В этих языках даются инструкции по пошаговому выполнению алгоритмов, осуществлению строгой последовательности действий, а данным и их структуре отводится второстепенная роль. Императивные языки незаменимы при написании драйверов устройств, командных файлов и других программных средств, работающих в "командном режиме".
    декларативные языки declarative languages В данных языках программирования "данные управляют программой". От значения данных, поступающих на вход программы, зависит направление расчетов. При этом алгоритм обработки данных является стандартным и как бы "зашит" в язык программирования.
    инструкция instruction Предписание исполнителю (человеку или автомату) на выполнение тех или иных операций. В языке программирования инструкцией может быть прагма оператор, оператор, выражение, объявление функции или переменной.
    пошаговое (выполнение) step-by-step (executing) Выполнение алгоритма последовательно, инструкция за инструкцией, в порядке их появления в программе.
    символическая логика symbolic logic Представление формальной логики на основе формализованного языка.
    формальная логика formal logic Наука о методах анализа высказываний и доказательств, в которой рассматриваются абстрактные символы и сформированные из них высказывания, но не придается никакого значения семантике этих абстракций.
    последовательность действий sequence of operation Правило, по которому любой алгоритм выполняется последовательно, инструкция за инструкцией, а не в произвольном порядке. Линейная последовательность действий при этом может нарушаться при использовании ветвлений и циклов, а также безусловных переходов.
    линейная последовательность linear sequence Последовательность действий, при которой алгоритм выполняется шаг за шагом, инструкция за инструкцией, от начала последовательности до ее конца. Алгоритм, состоящий только из одной линейной последовательности действий, называется линейным алгоритмом. Линейная последовательность действий внутри ветвления или цикла называется его телом.
    тело body Линейная последовательность инструкций внутри цикла, ветвления или процедуры.
    данные data Представление различной информации в виде, позволяющей автоматизировать ее сбор, хранение, передачу и дальнейшую ее обработку в ЭВМ. Данными могут быть набор знаков, цифр и т.п., над которыми можно выполнять различные операции.
    упорядоченные данные ranked data Данные, обработанные человеком и приведенные в такой вид, что они могут быть переданы последовательно, без дополнительной ручной обработки, на обработку в ЭВМ. Основное свойство упорядоченных данных - способность передавать их в ЭВМ в том же порядке, в котором происходит считывание ею данных для обработки.
    устройство device Устройство для внешней обработки информации, подключенное к ЭВМ. Различают периферийные устройства (внешние устройства, подключаемые к ЭВМ), внутренние устройства (одни из составных частей ЭВМ) и виртуальные устройства (которое моделируется, "эмулируется" программно в памяти ЭВМ).
    факт fact На языке ПРОЛОГ является аналогом данных. Представляет собой некоторое свойство, применимое к значению некоторых переменных, которое само по себе может принимать значение "истина" или "ложь". Например, факт отец(Александр, Юрий) говорит о том, что значение "Александр" связано со значением "Юрий" отношением "отец", и что это отношение - истинно.
    правило rule Представляет собой некоторое свойство ("отношение") между несколькими переменными, которое может быть истинным или ложным, в зависимости от того, совпадают или нет значения переменных с их значениями, записанных в фактах.
    продукция production Правило, по которому из фактов доказывается истинность или ложность заданного утверждения или ищется набор значений переменных, при котором это утверждение истинно. В языке ПРОЛОГ продукции вместе с системой логического вывода генерируют набор значений переменных, при котором все продукции истины.
    экспертная система expert system Программа, написанная инженером по знаниям, позволяющая моделировать рассуждения эксперта в некоторой области знаний, делать вместо него выводы и объяснять полученные результаты. Экспертные системы пишутся, как правило, на языке ЛИСП или ПРОЛОГ.
    транслятор (языка программирования) translator (of the programming language) Программа, переводящий алгоритм, написанный на языке программирования высокого уровня, в объектный код или в псевдокод исполнителя. По этому принципу трансляторы делятся на компиляторы и интерпретаторы.
    компилятор compiler Транслятор, преобразующий текст программы в объектный код.
    интерпретатор interpreter Транслятор, преобразующий текст программы на языке высокого уровня в псевдокод, немедленно исполняющийся на компьютере. К "интерпретируемым" языкам относят языки: "Бейсик", "Perl", "Python", Java и т.д.
    объектный код object code Код, генерируемый компилятором, который максимально приближен к машинным кодам ЭВМ. В готовую к исполнению на ЭВМ программу этот код преобразуется при помощи компоновщика.
    псевдокод pseudocode Некоторый код, не обязательно являющийся машинным кодом, который может исполняться ("интерпретироваться") программой-оболочкой. К "псевдокодам" относят: "польскую запись" выражений, псевдокод Java, псевдокод Net Framework, псевдокоды Perl, Basic, Python и других макроязыков.
    искусственный интеллект artificial intelligence Совокупность алгоритмов, реализующих действия, ранее выполняемые только человеком. Искусственным интеллектом также называется часть информатики, алгебры и т.п., изучающая эти алгоритмы.
    архитектура "фон Неймана" von Neumann machine Любая ЭВМ, удовлетворяющая следующим требованиям. Во-первых, ее основные блоки - устройство управления, арифметико-логическое устройство и устройство ввода-вывода. Во-вторых, программы и данные хранятся в одной и той же памяти. В-третьих, устройство управления и арифметико-логическое устройство, вместе со "сверхоперативной" памятью, объединенные в "центральный процессор", определяют действия, подлежащие выполнению, считывая инструкции из оперативной памяти.
    калькулятор calculator Прибор для "ручного" счета численных величин, прежде всего, их сложения, вычитания, умножения, деления, нахождения "обратной" величины и извлечение квадратного корня. Калькуляторы делятся на бухгалтерские, инженерные и программируемые калькуляторы.
    ассемблер assembler Язык программирования "низкого уровня", максимально приближенный к "машинным кодам". Программирование на ассемблере позволяет создавать эффективные программы, однако размеры текста программы и время отладки программы являются столь большими, что ограничивает использование ассемблера только задачами написания драйверов, критически важных программ и утилит.
    архитектура ЭВМ computer architecture Описание некоторой вычислительной системы на некотором общем уровне. Включает: описание возможностей программирования, системы команд, тип пользовательского интерфейса, организация памяти и тип ее адресации, базовые операции ввода-вывода, управления и т.п. Общность архитектуры разных ЭВМ обеспечивает их совместимость с точки зрения программ пользователя.
    регистр register Сверхоперативная память центрального процессора ЭВМ, служащая для быстрого доступа и временного хранения исходных данных, результатов операций, счетчиков, адресов памяти и т.д.
    процессор processor Устройство управления компьютером, арифметико-логическое устройство, регистры, объединенные в единое целое и управляющее ходом вычислений, работой устройств ввода-вывода, осуществляющее полное управление компьютером. Кроме собственно процессоров (по-другому - центральных процессоров) существуют так называемые сопроцессоры.
    сопроцессор coprocessor Процессор, осуществляющий дополнительные вычисления на компьютере, но, в отличие от центрального процессора, не управляющий работой компьютера. Как правило, сопроцессоры управляются центральным процессором. К сопроцессорам относят математический сопроцессор, специализированные ЛИСП- и ПРОЛОГ- процессоры.
    прикладной программист applications programmer Лицо, специализирующееся в написании прикладных программ.
    прикладная программа application Программа, способствующая выполнению задачи, возложенной на данную ЭВМ. Прикладными программами могут быть бухгалтерские, финансовые, офисные, научные, инженерные, графические, издательские и т.п. программы. Прикладные программы следует отличать от операционных систем и средств разработки, несущих "общесистемные" функции.
    процедура procedure Смотри модуль программный.
    модуль (программный) module Программа, используемая в качестве составной части других программ, либо как самостоятельная программа автономного приложения.
    функция function Программный модуль, возвращающий одно (и только одно) значение функции. Этим это определение похоже на определение функции в "алгебраическом" смысле. Функция может содержать формальные параметры.
    объявление declaration Указание имени, типа переменных, функций и ее параметров перед их использованием или описанием. В языках Си/С++ объявление всегда должно предшествовать описанию и использованию переменных/функций/параметров.
    Язык C-- C-- language Один из клонов языка Си, содержащий множество функций и "вставок" на языке ассемблер. Этот язык подходит для написания драйверов к операционным системам.
    драйвер driver Программа, управляющая работой какого-либо устройства ЭВМ, которая позволяет операционной системе и прикладным программам осуществлять ввод-вывод на это устройство, не прибегая к "прямому" программированию устройства в машинных кодах. Для разных устройств и для разных операционных систем существуют свои драйверы. Однако существуют и "универсальные" драйверы устройств.
    командный файл command file Файлы командной оболочки операционной системы, предназначенные для автоматизации часто выполняемых операций в командной строке.
    алгоритм algorithm Сформированный на некотором (естественном или формальном) языке набор правил-инструкций, указывающий на действия, последовательное выполнение которых приводит от начальных данных к конечному результату.
    подпрограмма subroutine Программный модуль, не возвращающий своего значения, а передающий измененные значения через формальные параметры по ссылке.
    ФОРТРАН FORTRAN Аббревиатура от "FORmula TRANslator" - "переводчик формул". Язык модульной парадигмы программирования, предназначенный для "кодирования" численных вычислений, прежде всего для научных расчетов.
    численные алгоритмы numerical algorithm Алгоритмы численных расчетов, применяемых в научной и экономической областях. Численные алгоритмы позволяют проводить "глубокую и сложную обработку" небольшого количества исходных численных значений.
    коммерческие алгоритмы algorithm for business Алгоритмы численных расчетов, применяемых в бизнесе и экономике. Эти алгоритмы позволяют проводить несложную числовую обработку большого количества исходных данных, расположенных на разных носителях.
    КОБОЛ COBOL Аббревиатура от "Common Business Oriented Language" - "язык, ориентированный на общий бизнес". На этом языке пишутся коммерческие алгоритмы по хранению и обработке коммерческих данных на различных носителях информации.
    Quick Basic ("квик бейсик") Quick Basic Реализация интерпретатора языка Бейсик от корпорации Microsoft. Эта версия бейсика работает на операционных системах, начиная с MS-DOS 6.0
    расширение (файла) extension (of the file) Часть имени файла, расположенная в конце его имени и отделенная от остальной части имени файла знаком "точка" ("."). По расширению файла обычно определяют тип и назначение этого файла.
    имя программы program name Имя файла исполняемой программы (вместе с ее расширением), которое необходимо набрать в командной строке для ее запуска. Кроме имени программы, при запуске из командной строки также необходимо бывает указать опции и аргументы-значения.
    аргументы-значения value of arguments Параметры (опции, аргументы, имена файлов, переменных среды и т.п.), передаваемые команде в качестве фактических параметров при ее вызове из командной строки. Список и тип "формальных параметров", необходимых для запуска команды, можно получить, задав в качестве параметров функции одно из следующих значений: "/?", "-?", "-h" или "-help".
    оператор "STOP" STOP operator Оператор языка Бейсик вообще и Quick Basic в-частности, который останавливает выполнение основной программы и передает управление оболочке (IDE) интерпретатора. Этот оператор может встречаться в любом месте программы.
    оператор "END" END operator Оператор языка Бейсик вообще и Quick Basic в-частности, который сигнализирует о конце выполняемой программы. Все строки, написанные после этого оператора, игнорируются. Оператор "END" должен быть последним оператором в программе.
    комментарий remark Строка текста внутри файла с программой (макроса), которая служит для пояснения действий программиста. Информация из комментария не обрабатывается транслятором языка и не участвует в алгоритме. Строки комментария обязательно помечаются специальными знаками, чтобы их было легко отделить от текста программы.
    ключевое слово "SUB" SUB keywords Ключевое слово на языке Quick Basic, с которого начинается описание процедуры на этом языке. Текст за этим ключевым словом "скрыт" оболочкой (IDE) программы Quick Basic.
    оболочка Quick Basic Quick Basic shell Синоним IDE (интегрированное окружение разработчика) для интерпретатора Quick Basic
    пуск, прогон run Пункт меню IDE, в котором собраны команды управления запуском и отладкой транслированной программы на одном из языков.
    продолжить continue Пункт меню IDE, подающий команду внутреннему отладчику IDE на запуск остановленной ранее программы с текущей позиции. Эта программа применяется, например, после чтения значений в точке "останова", или для отмены "пошагового", с остановом после каждого оператора, режима работы отладчика.
    присвоение значений assignment of values Оператор, который записывает в оперативную память ЭВМ новое значение переменной. При этом старое значение теряется безвозвратно! Присвоенным значением может быть значение переменной, выражения, константы или вызова функции.
    оперативная память on-line storage Одно из основных "внутренних" устройств компьютера, предназначенное для временного хранения данных и кода программ (см. архитектура фон Неймана).
    идентификатор identificator Любое сочетание латинских букв и цифровых знаков, начинающееся с буквы. Практически во всех языках программирования имена переменных, операторов, процедур и функций, а также макросов и прагма операторов могут быть только идентификаторами.
    фактические параметры actual parameters Значения констант, переменных, выражений, вызовов функций, которые передаются процедуре или функции, замещая формальные параметры. Фактические параметры ставятся в соответствие формальным параметрам при вызове функций. Фактические параметры могут передаваться функции по ссылке или по значению, в зависимости от типа формальных параметров.
    формальные параметры formal parameters Переменные, объявленные при описании функции и процедур, в ее заголовке, хранимые в стеке модуля программы и использующиеся в теле модуля при вычислениях. Тип фактических параметров должен обязательно совпадать с типом формальных параметров.
    стек (системный) stack (of the system) Область в оперативной памяти ЭВМ, которая работает по принципу: "последним записан" - "первым считан" (имеет английскую аббревиатуру "LIFO"). Системный стек используется для передачи значений функций и процедур, для временного сохранения значений, записанных в регистре процессора.
    по значению by value Способ передачи фактических параметров, когда в стек заносится значение переменной, выражения и т.п. После выхода из модуля стек "очищается", таким образом, значение, сохраненное в стеке, теряется. Передача данных по значению проста в реализации, безопасна, поэтому по-возможности следует использовать именно ее.
    по ссылке by links Способ передачи фактических параметров, когда в стек заносится "адрес" переменной - фактического параметра в оперативной памяти, а программа сама обеспечивает "синхронизацию значений" переменной в теле функции и в оперативной памяти. После "очистки" стека значение переменной, расположенной в оперативной памяти, сохраняется. Передача значений по ссылке небезопасна!
    тип формального параметра type of formal parameter Тип переменной формального параметра, указанный при объявлении функции. Тип этой переменной определяет, как будут заноситься в стек эти параметры.
    тип фактического параметра type of actual parameter Тип переменной фактического параметра, используемый при подстановке значений формальных параметров. Тип фактических параметров должен строго соответствовать типу формальных параметров. Если это не так, то необходимо использовать операцию приведения типов.
    переменная variable Идентификатор, используемый для обозначения некоторой хранимой в оперативной памяти величины, которая может быть изменена во время выполнения программы.
    выражение expression Компонент языка программирования, определяющий способ вычисления некоторого значения переменной.
    константа 1 constant 1 Величина, значение которой не меняется. Эта величина может быть записана как идентификатор (для иллюстрации см. переменная).
    константа 2 constant 2 Величина, значение которой определяется ее обозначением.
    арифметическое выражение arithmetic(al) expression Выражение, содержащее в себе вызов арифметических (алгебраических) функций и арифметических операций: "сложение", "вычитание", "умножение", "деление", "возведение в степень". Арифметическое выражение возвращает целое или вещественное число, имеющее допустимый для данного языка тип значения.
    логическое выражение logic expression Выражение, содержащее в себе операции: "арифметического отношения", "конъюнкции", "дизъюнкции", "логического отрицания", "исключающего ИЛИ", а также вызовы функций, возвращающих логическое значение. Логическое выражение возвращает число целого или булевского типа, в зависимости от языка программирования.
    символьное выражение character expression Выражения над символьными строками, включающие в себя операции конкатенации, поиска и замены по образцу, разбиения строк на фрагменты, валидация, перекодирование и другие операции. Операции над символьными данными изучаются дисциплиной "формальная грамматика".
    заголовочная часть (программы) header (of a program) Часть текста программы, содержащая в себе прагма операторы, описание переменных, констант и объявление функций, необходимых для правильной работы алгоритма. Если один и тот же заголовок используется более чем одним файлом с описанием алгоритма, то их имеет смысл вывести в отдельный заголовочный файл. На языке C++ этот файл имеет расширение "*.h" или "*.hpp".
    оператор "#include" #include directive Прагма оператор для "включения заголовочной части" к файлу с описанием алгоритма (например, на языках Си/C++). См. заголовочная часть программы.
    основная функция программы main function Главная, основная функция программного продукта, которая содержит "в общих чертах" весь алгоритм работы и управляет вызовом всех остальных процедур. Основная функция появилась впервые в структурированной парадигме программирования на языках Паскаль и Си. На языке Си основной функцией является функция "main" в MS-DOS и "WinMain" в MS-Windows.
    Windows API Windows API Библиотека стандартных функций для языков программирования, позволяющая создавать приложения Windows на стандартном языке программирования. В отличие от других библиотек, библиотека Windows API работает на "нижнем" уровне программирования, поэтому созданные с ее помощью программы имеют очень "объемный" код.
    вызов функции call of the function Передача управления функции или подпрограмме с последующим возвратом к основной программе по окончании ее выполнения. Возможен возврат значений, измененных в результате работы функции.
    успешный результат success result Результат работы функции, завершившейся в "штатном" режиме, без возникновения ошибок, отказов, "исключительных ситуаций", происходящих от некорректных данных. При успешном результате функция заполняет внешние и внутренние переменные "нормальными" значениями, и выдает целое число. По "джентльменскому соглашению" функция возвращает "0" при своем удачном завершении.
    макрофункция macro function Вид функций в языках программирования, при которых не происходит прерывания программы, не используется стек и не происходит обращения к коду функции по адресу, а происходит просто "повторное использование кода" путем многократной вставки текста макрофункции в текст программы. Макрофункции ускоряют работу программ, однако их код используется не эффективно.
    макроподстановка macro substitution Подстановка в макрофункцию вместо ее формальных параметров фактических параметров (без использования стека), путем простого поиска и замены фрагмента текста. Макрофункции и макроподстановки широко используются в языках Ассемблер и Си.
    арифметическое отношение arithmetic(al) ratio Арифметическое отношение между двумя целыми или вещественными числами (вида: "равно", "не равно", "больше", "больше или равно", "меньше", "меньше или равно" и т.п.). На реализацию арифметических отношений между числами в языках программирования накладываются ограничения на представления (типов) чисел в компьютере (см. часть G).
    конъюнкция conjunction Логическое И. Результат операции истинен только тогда, когда истины обе из посылок (утверждений, отношений и т.п.)
    дизъюнкция disjunction, alternation Логическое ИЛИ. Результат операции истинен только тогда, когда истина хотя бы одна посылка или две сразу.
    логическое отрицание negation Преобразует ложное высказывание в истинное, а истинное - в ложное.
    логическое "исключающее ИЛИ" logical "excluding OR" Результат операции истинен тогда, когда обе посылки или обе истины, или обе ложны.
    конкатенация concatenation Соединяет ("бесшовно") две произвольные строки в одну строку. Порядок строк имеет значение!
    поиск по образцу search by the pattern Ищет в строке (или во всем тексте) очередное вхождение подстроки-образца, и выдает позицию его вхождения.
    образец pattern Строка символов, с которой сверяют найденный фрагмент в тексте. Может быть строкой "обычных символов" (т.н. "литералов"), а может содержать в себе регулярное выражение.
    замена фрагмента replacing of a fragment of the text Операция замещения найденного по образцу текста другим текстом, которым может быть только "литерал".
    разбиение строки 1. breakdown of a line Операция, при которой содержимое строки с текстом на экране дисплея (или в текстовом редакторе) разбивается на две или большее число менее длинных строк.
    разбиение строк 2. partition of strings Общее название операций над символьными строками, при которых из "единой" текстовой строки изымаются ее фрагменты, а также производится разбивка одной строки на несколько более коротких строк (операция, обратная конкатенации).
    компоновка (программы) build (of a program) В IDE - процесс компиляции и создания исполняемого файла (c расширениями *.com, *.exe, *.dll, *.ocx, *.so и др.) из текста программы на языке программирования и, возможно, подготовка к его отладке в том же IDE.
    Perl Perl Язык программирования "высокого уровня" предназначенный для обработки символьных данных путем создания исполняемых макросов. Этот язык - интерпретируемый, императивный, кросс-платформенный. Он широко используется в системном администрировании, для написания сценариев в Интернете, для предварительной символьной обработки данных.
    переменная "@_" variable "@_" Специальная переменная языка Perl, предназначенная для передачи "фактических параметров" основной функции или подпрограмме на языке Perl. При этом данные могут передаваться либо по значению, либо как "разыменованный указатель на переменную" типа "массив" и "ассоциативный массив".
    функция "exit" exit function Функция на языках Си, C++, Perl и др., при вызове которых происходит завершение работы программы и возврат целого значения операционной системы. Эта функция используется для того, чтобы передать системе код ошибки, возникших, например, от некорректных данных. Далее это возвращаемое значение может обрабатываться средствами команд оболочки операционной системы.
    валидация validation Проверка на соблюдение синтаксиса и семантики текстом, написанным на некотором естественном или искусственном языке, а также любого текста с языком разметки внутри него. Проверка орфографии является одним из примеров валидации.
    перекодирование recoding Преобразование символов некоторого языка из одной кодовой страницы в другую.
    кодовая страница codepage Способ назначения литерам латинского или иного алфавита уникального кода, состоящего из целых чисел, для дальнейшей их обработки на ЭВМ.
    литерал literal В языках программирования - строка литер (символов), значение которых определяется этими символами и их порядком. Литералы каким-либо способом выделяются в тексте программы. Литералами не являются: операторы, имена констант/функций, теги и другие специальные конструкции языка. В то же время литералами могут быть константы, строки, внешние опции и команды, подаваемые на вход программы и т.п.
    программный интерфейс application interface Характеристика для связи ("сопряжения") нескольких программных модулей. Характеризуется точным описанием использования формальных и фактических параметров, имен глобальных переменных, унификация в имени и параметрах схожих по назначению функций. Программист может использовать программный интерфейс в своих разработках, ничего не зная о его реализации, и все будет работать правильно!
    API API Расшифровывается как "Application Programming Interface" - интерфейс прикладного программирования. Представляет собой стандарт на программный интерфейс внутри библиотеки программ или операционной системы, средой разработки.
    библиотека library Совокупность отдельных программ и программных пакетов, которые предназначены для всеобщего использования в какой-либо определенной среде. Компоненты этой библиотеки не обязательно должны быть связанными.
    комментарии remarks Вставленные в текст программы символы, игнорируемые компилятором и служащие для облегчения понимания синтаксических конструкций, написанных программистом. Обычно комментарии в программе "заключаются" между специальными символами, реже вводятся отдельным оператором.
    метка label Число или идентификатор, поставленный в начале какого-либо ("помеченного") оператора, на который будет передаваться управление в результате выполнения операции безусловного перехода. Эта метка должна иметь имя, уникальное среди всех меток и/или идентификаторов.
    ключевое слово keyword Символический идентификатор в языке программирование, имеющее особое значение для компилятора или интерпретатора. Эти слова помогают при анализе выражений языка и создании программы. Идентификаторы переменных, функций, констант, меток и т.п. не могут совпадать с ключевыми словами.
    основная программа main program Модуль при создании программного проекта, который предназначен для управления всеми остальными подпрограммами проекта, содержит запускающий файл, и файл с ним имеет имя "имя проекта". В языке Си основная программа проекта имеет имя: "main".
    основной файл проекта project's main file См. Основная программа
    прагма оператор pragma operator Оператор, служащий для подачи компилятору проекта определенной информации. См. директивы компилятору.
    запуск команды run of a command Запуск скомпилированной программы на исполнение. Обычно осуществляется либо набором имени файла с программой в командной строке и нажатием клавиши: "Enter", либо двойным щелчком левой клавишей мыши на значке программы в файловом менеджере.
    скрипт script См. командный файл
    макрос macros См. командный файл
    успешный результат success result Результат выполнения команды пользователя, программы и т.п., при которых ее выполнение прошло "в штатном режиме", без возникновения ошибок или исключительных ситуаций. По-умолчанию при успешном результате выполнения программы он возвращает операционной системе значение: "0".
    аргумент arguments Собирательное название формальных параметров процедуры, опций и параметров команд, программ, командных файлов, макросов, скриптов и т.п.
    опция option Не обязательное вхождение в командной строке команды символов, которое изменяет алгоритм, последовательность операций алгоритма и т.п. С помощью опций можно во много раз повысить функциональность одной и той же команды в командной строке, добавить дополнительные действия либо исключить лишние действия, не создавая нового кода программы.
    параметр parameter Обязательное вхождение в командной строке символов, которое определяет необходимую дополнительную информацию (имя файла, имя переменной, режим работы и т.п.), без указания которой команда "не работоспособна".
    командная строка 1. command line Одна из технологий командного интерфейса, в которой пользователь вводит на консоли некоторые команды на выполнения действий, а ЭВМ выдает на ту же консоль результаты выполнения программ.
    консоль console В терминах ЭВМ консоль представляет собой "терминал", т.е. для ввода используется клавиатура, а для вывода - экран дисплея.
    командная строка 2. command line На экране дисплея представляет собой некоторое приглашение на ввод команды (которое можно настроить) и текстовый курсор, в позицию которого вводится текст с клавиатуры. Команды завершаются нажатием клавиши: "Enter". После выполнения команды результат выводится с новой строки, вывод заканчивается символом ввода новой команды.
    массив символьных переменных massive of the character variables Одиночные символы, которые располагаются подряд в ячейках оперативной памяти. Доступ к каждому элементу осуществляется по его индексу. Массив символьных переменных является простейшим способом представления символьных строк. В настоящее время тип: "строка" состоит из массивов символьных данных, к которым добавлена служебная информация для управления ими.
    директивы компилятору directives for compilator Специальные директивы языка программирования: идентификаторы, прагма функции и операторы и т.п., не описывающие алгоритм задачи, а указывающие компилятору, как обрабатывать, оптимизировать код для данного файла с алгоритмом.
    макрофункция macro function Функция, код которой не вызывается внешней программой, а "повторяется" после обработки компилятором. Макрофункция обычно реализуется с помощью директив компилятору. Макрофункции сокращают количество вызываемых подпрограмм, но увеличивает код вследствие повторения одних и тех же участков.
    макроподстановка macro substitution Подстановка тела макрофункции в текст готовой программы в тех местах, где она встретилась.
    глобальные переменные global variables Переменные, объявленные и описанные перед определением главной функции приложения "main" и доступные для всех модулей-подпрограмм.
    компилировать compile Преобразовывать при помощи программы-компилятора исходный текст программы на языке программирования в объектный код ЭВМ.
    скомпоновать build Преобразование объектного кода, сгенерированного в результате выполнения проекта, в код готовой программы для операционной системы. При компоновке устанавливаются связи между программами, назначаются "абсолютные адреса" переменным, определяются "точки входа" для функций и т.п.
    интегрированная среда разработчика Integrated development environment, IDE Программный комплекс, включающий в себя текстовый редактор, компилятор, компоновщик, отладчик и др. утилиты, необходимые для создания и отладки проектов по производству программных продуктов. Обычно IDE поставляются вместе с языками программирования.
    иконка, пиктограмма icon Схематический значок, при двойном щелчке на котором запускается связанная с ним программа, или запускается на редактирование файл в одной из программ. Иконка является важной частью WIMP-интерфейса. Эти значки отображаются на "Рабочем столе" экрана компьютера либо в списках файлов или программ.
    рабочий стол desktop Представляет собой экран компьютера, на котором расположены инструменты управления компьютером, а также значки для запуска приложений и файлов.
    отладка сценариев debugging of the scripts (macros) Нахождение ошибок в программе сценария или макро функций. При отладке сценариев практически не используются внешние отладчики.
    файл-библиотека (Perl) file with library Одиночный файл с макрофункциями, доступный для всех других макросов, созданных на языке Perl. Это очень простой способ для повторного использования кода в Perl.
    модуль (Perl) module (of a Perl) Файл с подпрограммами на языке Perl и ссылками на двоичные файлы, содержащийся в системной библиотеке с расширением: "*.pm". В отличие от файлов-библиотек, модули не копируются, а инсталлируются с установлением зависимостей с другими пакетами Perl.

    3.6. Приложения

    3.6.1. Приложение I. Формат "заголовочных частей" (файлов "*.h") языков Си/C++

    В "заголовочные файлы" программ на языке Си/C++ пишется следующая информация:

  • 01. Текст с описанием назначения заголовочного файла;
  • 02. Конструкция для предотвращения повторного использования файла;
  • 03. Другие заголовочные файлы, содержащие константы и объявления функций, используемых в данном файле. При этом должно быть исключено повторное объявление одних и тех же модулей в заголовочных файлах;
  • 04. Вставка необходимых прагма операторов (директив компилятору);
  • 05. Определение констант и макроподстановок;
  • 06. Объявление структур, объединений и перечисляемых типов;
  • 07. Объявление глобальных переменных;
  • 08. Объявление функций.
  • Рассмотрим эти конструкции поподробнее:

    Пункт 01 Текст с описанием назначения заголовочного файла

    Представляет собой следующий шаблон:

    /**********************************************************
     *
     * Файл <имя файла>.H
     *
     * НАЗНАЧЕНИЕ:
     *
     * ЗАВИСИМОСТИ:
     *
     * Copyright (R)
     *
    **********************************************************/

    В нем обязательно нужно указать название файла, назначение констант, переменных, объявлений типов и функций, использованных в данном заголовочном файле. Это нужно сделать "коротко и ясно". Также желательно указать зависимости данного файла с другими заголовочными файлами, а также правообладателя программы (название организации, либо имя и псевдоним, и обязательно контактные данные). Это может потребоваться при внесении изменений в программу в целом и в этот заголовочный файл в частности.

    Пункт 02 Конструкция для предотвращения повторного использования файла

    Представляет собой следующий шаблон:

    #ifndef __"имя файла"_H
    #define __"имя файла"_H
    
    …
    
    #endif
    
    /* Конец заголовочного файла */

    Эта конструкция определяет переменную: " __"имя файла"_H ". Именно использование этой переменной в пункте 3 (вернее, проверка на ее существование) предотвращает повторную загрузку заголовочного файла из самого себя или другого заголовочного файла.

    В конце описания заголовочного файла должно стоять подножие: #endif. Заметим, что использование этих конструкций и правила именования переменных является стандартным приемом "обхода" такого рода проблем.

    Пункт 03 Другие заголовочные файлы

    Вставка других заголовочных файлов представляет собой следующий шаблон:

    /* Включение заголовочных файлов */
    
    #ifndef __"имя файла1"_H
    #include ""имя файла1"".h
    #endif
    
    #ifndef __"имя файла2"_H
    #include <"имя файла2">.h
    #endif
    
    …

    Обратите внимание, что оператор вставки файла " #include " окружен "условными прагма операторами" " #ifndef " и " #endif ". Их использование предотвращает повторную загрузку заголовочных файлов и, таким образом, предотвращает повторное определение или переопределение типов, констант и переменных, указанных в них.

    Пункт 04 Вставка необходимых прагма операторов

    Эти операторы вставляются в текст только по-необходимости, и часто их включения не требуется.

    Пункт 05 Определение констант и макроподстановок

    Сюда вставляются определения констант и макроподстановок, определенных через прагма оператор #define. Конечно, его использование может некоторыми авторами рассматриваться как "анахронизм". Однако оцените его удобство и универсальность!

    Примечание: константы и макрофункции здесь следует набирать прописными буквами (хотя это не обязательно).

    Определение представляет собой следующий шаблон:

    /* Определение констант */
    
    #define "ИМЯ_КОНСТАНТЫ" "значение" 
    
    /* Определение макроподстановок */
    
    #define "МАКРОФУНКЦИЯ"("ПАРАМЕТРЫ") "текст макроса"

    Пункт 06 Объявление структур, объединений и перечисляемых типов

    Объявления представляют собой следующий шаблон:

    typedef struct "tagType"
    {
    	"определение типа Type"
    }"Type";
    
    typedef union "tagType"
    {
    	"определение типа Type"
    }"Type";
    
    typedef enum "tagType"
    {
    	"определение типа Type"
    }"Type";

    Пункт 07 Объявление глобальных переменных

    Иногда необходимо в файле задать переменные, которые будут использоваться сразу несколькими описанными функциями. Эти переменные можно объявить как "глобальные переменные", а не передавать в качестве параметров. Это может создать более понятные и "компактные" программы. Эти объявления можно описать как в заголовочном файле, так и в начале файлов с описанием (определением) нужных функций.

    Объявление представляет собой следующий шаблон:

    /* Объявление глобальных переменных */
    
    	"тип"		"имя"
    	…		…;

    Пункт 08 Объявление функций

    Перед использованием новых функций на языке Си необходимо прежде их объявить, что и происходит в конце заголовочного файла.

    Объявление представляет собой следующий шаблон:

    /* Объявление функций: */
    
    "тип возвр. значения" "имя функции1"("имя и тип формальных параметров"…);
    "тип возвр. значения" "имя функции2"("имя и тип формальных параметров"…);
    …

    Пример шаблона

    /**********************************************************
     *
     * Файл <имя файла>.H
     *
     * НАЗНАЧЕНИЕ:
     *
     * ЗАВИСИМОСТИ:
     *
     * Copyright (R)
     *
    **********************************************************/
    
    #ifndef __"имя файла"_H
    #define __"имя файла"_H
    
    /* Включение заголовочных файлов */
    
    #ifndef __"имя файла1"_H
    #include ""имя файла1"".h
    #endif
    
    #ifndef __"имя файла2"_H
    #include <"имя файла2">.h
    #endif
    
    …
    
    /* Указание директив компилятору: */
    
    …
    
    /* Определение констант */
    
    #define "ИМЯ_КОНСТАНТЫ" "значение" 
    
    /* Определение макроподстановок */
    
    #define "МАКРОФУНКЦИЯ"("ПАРАМЕТРЫ") "текст макроса"
    
    /* Определение типов */
    
    typedef enum tag"имя типа"
    {
    	"константа 1";
    	…
    	"константа n";
    }"имя типа";
    
    typedef struct tag"имя типа"
    {
    	"тип"	"имя поля";
    	…		…;
    }"имя типа";
    
    
    typedef union tag"имя типа"
    {
    	"тип"	"имя поля";
    	…		…;
    }"имя типа";
    
    /* Объявление глобальных переменных */
    
    	"тип"		"имя"
    	…		…;
    
    /* Объявление функций: */
    
    "тип возвр. значения" "имя функции1"("имя и тип формальных параметров"…);
    "тип возвр. значения" "имя функции2"("имя и тип формальных параметров"…);
    …
    
    #endif
    
    /* Конец заголовочного файла */

    3.6.2. Приложение II. Стандартные шаблоны оформления модулей и библиотек на Perl

    Подпрограммы служат для объединения группы операторов с целью их повторного использования. Следующим шагом является объединение группы подпрограмм и их сохранение в отдельном файле для последующего использования в других программах. Для реализации этой задачи в языке Perl присутствуют два механизма: библиотеки и модули.

    3.6.2.1. Библиотеки Perl

    Библиотека представляет собой пакет, областью действия которого является отдельный файл. Иными словами, библиотека - это файл, в качестве первой строки содержащий объявления пакета:

    package "имя пакета"
    Примечание: информацию о том, что такое пакет, можно посмотреть, например, в [59].

    Имя файла библиотеки обычно имеет расширение "*.pl".

    Для использования библиотеки в основной программе ее нужно подключить при помощи директивы компилятору require. О синтаксисе и назначении функции require смотри раздел 3.7.2.3.1.

    3.6.2.1.1. Создание библиотечного файла

    Для создания собственной библиотеки следует выполнить перечисленные ниже шаги:

  • Создать каталог для хранения библиотечных файлов;
  • Сохранить наборы программ в отдельных файлах-библиотеках, и поместить их в этот каталог;
  • В конец каждого библиотечного файла поместить строку: "1:".
  • Последний пункт служит для того, чтобы возвращаемое значение функции require не равнялось нулю.

    Пример:

    # библиотечный файл ~/bin/perllib/mylib.pl
    # знак "~" означает домашний каталог пользователя
    
    "подпрограмма 1"
    
    "подпрограмма 2"
    
    …
    
    1:

    3.6.2.1.2. Подключение библиотечного файла

    Для подключения библиотечного файла из собственной библиотеки следует выполнить перечисленные ниже шаги:

  • Добавить, после начальной директивы Perl, в массив @INC имя каталога, содержащего библиотечные файлы (смотри п. 3.7.2.1.1), либо при запуске основной программы передать это имя интерпретатору Perl при помощи ключа -I;
  • В основной программе использовать директиву require, указав в качестве аргументов имена требуемых библиотечных файлов.
  • Пример.

    #!/usr/bin/perl
    unshift( @INC, "~/bin/perllib");
    require "mylib.pl";
    "тело макроса"
    …

    3.6.2.2. Модули Perl

    Дальнейшим развитием понятия библиотеки явилось понятие модуля. Модуль представляет собой библиотеку подпрограмм, организованную в виде отдельного пакета и обладающими дополнительными свойствами.

    Модуль - это пакет. Пакет представляет собственное пространство имен, в котором для обозначения полного имени используется нотация вида "Родитель" :: "Сын" :: "Внук" :: "имя переменной". Модуль позволяет управлять экспортом своих имен в другие программы, объявляя, какие из них экспортируются по-умолчанию, а какие должны быть явно указаны при экспорте.

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

    В целях управления экспортом каждый модуль должен иметь в себе метод import и специальные массивы @EXPORT и @EXPORT_OK.

  • Вызывающая программа обращается для импорта имен метод import() ;
  • Специальный массив @EXPORT содержит идентификаторы, экспортируемые по-умолчанию;
  • Специальный массив @EXPORT_OK содержит идентификаторы, экспортируемые из модуля только в случае их явного указания;
  • С появлением модулей появилась новая директива для подключения к основной программе: use().
  • 3.6.2.2.1. Создание модуля

    Для создания собственного модуля следует выполнить перечисленные ниже шаги:

  • Создать каталог для хранения модулей. Правила именования каталогов см. [59];
  • Создать пакет с нужным именем (например, "MyModule"), сохранить его в файле "MyModule.pm" и поместить их в этот каталог;
  • Включить в файл имя встроенного модуля Exporter функцией require ;
  • Включить в файл с модулем определение массива @ISA, содержащее название пакета Exporter;
  • Определить имена функций для массивов: @EXPORT и @EXPORT_OK;
  • Записать встроенные функции пакета.
  • Пример файла модуля: MyModule.pm

    package MyModule;
    require Exporter;
    @ISA = qw( Exporter );
    @EXPORT = qw(MyArgs);
    @EXPORT_OK = qw( $MyArgs @MyArgs %MyArgs )
    
    sub MyArgs
    {
    	"тело функции"
    }
    
    # Примечание: вместо имени MyArgs в пакете могут быть определены другие имена переменных и функций
    
    "тело не экспортируемых функций"

    3.6.2.2.2. Подключение модуля

    К основной программе модуль MyModule подключается при помощи директивы use. Эта директива содержит список импорта.

    Обычно список импорта содержит имена переменных и функций. Кроме того, список импорта может содержать некоторые управляющие им спецификации. Спецификация :DEFAULT означает включение в список импорта всех элементов специального массива @EXPORT.

    Пример файла основной вызывающей программы MyMain.pl

    #!/usr/bin/perl
    use MyModule qw( :DEFAULT $MyArgs, @MyArgs %MyArgs );
    "операторы вызывающей программы"
    …

    3.6.2.3. Специальные функции-директивы Perl

    3.6.2.3.1. Функция require

    Функция загружает внешние функции из библиотеки Perl во время выполнения. Она используется для того, чтобы сделать библиотеку подпрограмм доступной для любого из макросов Perl.

    СИНТАКСИС:

    require [EXPR]
    require VERSION

    Если параметр EXPR отсутствует, вместо нее используется специальная переменная $_.

    Если параметр является числом, то он означает, что требуется версия интерпретатора Perl не ниже, чем указанная.

    Если параметр является строкой, функция require включает в основную программу библиотечный файл, заданный параметром EXPR. При этом функция использует две встроенные переменные Perl: @INC и %INC.

    Обычно имена библиотечных файлов имеют расширение: "*.pl". Поэтому для избегания неправильного толкования специальных знаков имена файлов следует заключать в кавычки, например:

    require "myfile.pl"

    Если аргумент является словом без расширения, не заключенным в кавычки, то ему добавляется расширение: "*.pm".

    3.6.2.3.2. Переменные @INC и %INC

    Специальный встроенный массив @INC содержит имена каталогов, в которых надо искать макросы языка Perl, в том числе и библиотеки, подлежащие в выполнению в конструкциях do, require и use. Первоначально он содержит:

  • имена каталогов, переданные при запуске интерпретатору Perl в качестве параметра ключа -I;
  • имена библиотечных каталогов по-умолчанию (зависит от операционной системы);
  • символическое обозначение текущего каталога ".".
  • Специальный встроенный хэш-массив %INC содержит по одному элементу для каждого файла, включенного с помощью функций do и require. Ключом при этом будет имя файла в том виде, в каком она встретилась в функциях do и require, а значением - его полное путевое имя.

    Встретив директиву require, интерпретатор Perl просматривает специальный хэш-массив %INC на присутствие в массиве имени файла. Если да, то выполнение функции завершается. Таким образом, файл может быть включен в список только один раз. Если же этого файла нет, то просматриваются все каталоги из массива @INC в поисках нужного файла. Если файл найден, то он выполняется, иначе генерируется ошибка.

    3.6.2.3.3. Функция use

    СИНТАКСИС:

    use Module [LIST]
    use VERSION

    Эта встроенная функция служит для загрузки модуля в момент его компиляции. Директива use автоматически экспортирует имена функций и переменных в основное пространство имен текущего пакета. Для этого оно вызывает метод: import() импортируемого модуля. Механизм экспорта имен рассчитан таким образом, что каждый экспортируемый модуль должен иметь свой модуль import(). Метод import() должен быть определен в самом экспортирующем модуле, или должен быть наследован у модуля Exporter.

    Если первый аргумент директивы use является числом, он обозначает номер версии интерпретатора Perl. Если версия интерпретатора Perl меньше, чем указанная в директиве use, то интерпретатор завершает работу, выдавая сообщение об ошибке.

    Если список импорта LIST отсутствует, из модуля Module будут импортированы те имена, которые перечислены в специальном массиве @EXPORT, определяемом в самом модуле Module.

    Если список импорта задан, то вызывающую программу из модуля Module будут импортированы только те имена, которые содержатся в списке LIST.

    3.6.3. Приложение III Тексты командных файлов Windows и Linux, с помощью которых можно облегчить выполнение сценариев на Perl.

    01. Файл perlbat.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться на C:\Perl\user\PerlScripts
    perl C:\Perl\user\PerlScripts\%1 Y:\%2 Y:\%3 Y:\%4 Y:\%5 Y:\%6 Y:\%7 Y:\%8 Y:\%9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить макрос, находящийся в директории: C:\Perl\user\PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    02. Файл perlexe.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться в той же директории, что и параметры:
    perl Y:\%1 Y:\%2 Y:\%3 Y:\%4 Y:\%5 Y:\%6 Y:\%7 Y:\%8 Y:\%9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    03. Файл perlbt.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться на C:\Perl\user\PerlScripts
    perl C:\Perl\user\PerlScripts\%1 %2 %3 %4 %5 %6 %7 %8 %9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить скрипт, находящийся в директории: C:\Perl\user\PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.

    Этот командный файл может запускаться только внутри других командных файлов.

    В именах файлов допускаются кавычки, кроме имени файла с макросом (с расширением *.pl, первый параметр).

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    04. Файл perlex.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться в той же директории, что и параметры:
    perl Y:\%1 %2 %3 %4 %5 %6 %7 %8 %9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.

    Этот командный файл может запускаться только внутри других командных файлов.

    В именах файлов допускаются кавычки, кроме имени файла с макросом (с расширением *.pl, первый параметр).

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    05. Файл perlbat.sh

    #/bin/sh
    #
    # @echo off
    # echo Вызываем интерпретатор Perl
    # echo Скрипт-файл на языке Perl должен
    # echo находиться на /home/имя_пользователя/bin/Perl/user/PerlScripts
    perl /home/имя_пользователя/bin/Perl/user/PerlScripts/$1 ./$2 ./$3 ./$4 ./$5 ./$6 ./$7 ./$8 ./$9

    С помощью данного файла можно запустить скрипт, находящийся в директории: /home/имя_пользователя/bin/Perl/user/PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Данный файл используется в среде ALT Linux для интерпретатора Perl версии 5.x.x.

    06. Файл perlexe.sh

    #/bin/sh
    #
    # @echo off
    # echo Вызываем интерпретатор Perl
    # echo Скрипт-файл на языке Perl должен
    # echo находиться в той же директории, что и параметры:
    perl ./$1 ./$2 ./$3 ./$4 ./$5 ./$6 ./$7 ./$8 ./$9

    С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Данный файл используется в среде ALT Linux для интерпретатора Perl версии 5.x.x.

    3.6.4. Приложение IV. Описание языков командных оболочек MS-DOS Command Shell и bash shell Linux

    Страницы:

    Цель лекции:

  • Познакомить читателей с основными парадигмами программирования, применяемых в современном программировании;
  • Научить читателей программировать, читать алгоритмы, создавать программы, на языках программирования, входящих в процедурную парадигму;
  • Научить правильной записи алгоритмов на языках, входящих в процедурную парадигму.
  • 3.1. Введение. Общие сведения о парадигмах

    Общие сведения о парадигмах программирования

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

  • 1957г., процедурная парадигма, язык ФОРТРАН, создатель Бэкус;
  • 1967г., функциональная парадигма, язык ЛИСП, создатель Маккарти;
  • 1970г., структурированная парадигма, язык ПАСКАЛЬ, создатель Вирт;
  • 1974г., логическая парадигма, язык ПРОЛОГ;
  • 1983г., объектно-ориентированная парадигма, пример - язык C++, создатель Страуструп.
  • В конце списка представлены языки программирования и их создатели, внесшие значительный вклад в популяризацию этих парадигм.

    В процессе своего развития эти парадигмы "мутировали", "отпочковывались", "объединялись" (так, язык Си объединил в себе процедурную и структурированную парадигму). В результате этих "мутаций" по состоянию на 01.06.2008 года оформились следующие парадигмы программирования:

  • Процедурная (или модульная) парадигма;
  • Логическая парадигма;
  • Объектно-ориентированная парадигма.
  • Эти три совершенно разные по подходу парадигмы составляют основу современного программирования. Хотя в настоящее время наиболее "модной" является объектно-ориентированная парадигма, остальные парадигмы также используются на практике и изучаются в ВУЗах. Их мы и рассмотрим ниже.

    Кроме деления языков программирования по парадигмам, существует также деление языков на "императивные" и "декларативные".

    Императивными называются такие языки программирования, в которых описываются в основном "инструкции" по пошаговому выполнению алгоритмов. Все внимание в них отводится лишь реализации этой последовательности действий, а данным и их структуре отводится второстепенная роль. Примером такого рода языков может служить языки создания драйверов устройств: Assembler и C++. При использовании этих языков мы не знаем, какие данные будет отправлять/получать устройство, но зато мы знаем, какие действия нужно осуществить над данными.

    Декларативными называются языки программирования, в которых алгоритм работы с данными "зашит" в языке программирования, а сама программа представляет собой данные, упорядоченные и структурированные таким образом, что их легко обрабатывают "стандартные" алгоритмы вывода. В декларативных языках как бы "нет разницы" между данными и алгоритмом, их обрабатывающим. От "значения" данных, подаваемых на вход программы, зависит дальнейшее направление расчетов. Примерами декларативных языков могут служить языки: LISP и Prolog. И программа, и данные на языке ЛИСП представляют собой "списки" вместе с функциями, выполняемыми над ними. На языке ПРОЛОГ есть условное разделение программы на данные ("факты") и код ("правила", "продукции"). Но это разделение достаточно условно: и факты, и правила имеют одну и ту же форму записи.

    Декларативные языки лучше всего использовать в случаях, когда "данные управляют программой": при написании экспертных систем, при конструировании трансляторов с языков программирования, для большинства задач искусственного интеллекта. Именно там их использование приведет к наибольшей эффективности.

    3.2. Процедурная парадигма

    Эта парадигма является самой "древней" и, одновременно, - самой простой в реализации и обучении программирования. На основе этой парадигмы изучаются языки программирования в школе. И поэтому, вполне естественно, автор поставил ее на первое место.

    3.2.1. История возникновения парадигмы

    "Истоки" процедурной парадигмы программирования лежат в далеких 50-х годах прошлого века. После появления ЭВМ с архитектурой "фон Неймана" появилась возможность компьютеру "самому", без участия человека, проводить сложные вычисления. Эти годы и стали переломными в становлении профессии "программист". Чтобы произвести сложные вычисления, нужно сначала написать сложный алгоритм. Поскольку сложный алгоритм трудно реализовать в ЭВМ так же, как на калькуляторе, появилась необходимость в "записи" алгоритмов на более "понятном" человеку языке, чем язык машинных кодов ЭВМ. Так, вначале появился язык ассемблера, представляющий машинные коды в "удобочитаемом" виде.

    В 1957 году Бэкус разработал первый язык высокого уровня: ФОРТРАН. Эта аббревиатура переводится как: "FORmula TRANslator", - переводчик формул. Как следует из его названия, его назначение - это числовые вычисления. С помощью этого языка можно было "кодировать" численные алгоритмы, не вдаваясь в архитектуру ЭВМ, количество регистров в ее процессоре, особенности ее функционирования, и другие, "не важные" для прикладного программиста вопросы. Вскоре, в начале 60-х годов прошлого века, появился язык: "COBOL", - язык, предназначенный для коммерческих вычислений. Аббревиатура "COBOL" расшифровывается как: "COmmon Business Oriented Language" - "язык, ориентированный на общий бизнес".

    В реализации этих языков была предусмотрена (как и в ассемблере) возможность "разбивки общего алгоритма" на несколько независимых модулей: "процедур". "Нанизывая" процедуры в основном модуле программы, как гирлянды на нитку, можно получить алгоритмы любой сложности. В этом и состоит преимущество процедурного программирования.

    Таким образом, возникла "процедурная парадигма", гласящая:

    "Реализацию алгоритмов вычислений необходимо создавать с помощью мелких, не зависимых друг от друга процедур, которые вызывают друг друга в соответствии с логикой программы".

    Эта парадигма проста не только в "написании" алгоритма, но и его отладке: нужно убедиться в "работоспособности" каждого из модулей, что намного проще, чем отладка всего алгоритма целиком.

    3.2.2. Языки, поддерживающие парадигму

    Среди языков, поддерживающих процедурную парадигму программирования, используются следующие языки программирования:

  • Ассемблер;
  • Фортран;
  • Кобол;
  • Алгол;
  • PL 1;
  • Бейсик;
  • Си;
  • Паскаль;
  • Perl;
  • VB Script;
  • Jscript;
  • Multi Edit Macro Script;
  • MS-DOS Command Shell;
  • NDOS Shell;
  • Bash shell;
  • tc shell;
  • REXX;
  • язык SQL-запросов;
  • и др.
  • Все они поддерживают создание "модулей" - функций и подпрограмм, которые разрабатываются и тестируются независимо, и осуществление "вызовов" между ними.

    3.2.3. Представление программ и реализация вычислений

    Прежде, чем передать код программы на обработку компилятору, программист должен соответствующим образом оформить код программы. В этом разделе даются общие правила оформления кода программы на разных языках программирования.

    3.2.3.1. Quick Basic

    В языке Quick Basic есть следующие правила оформления программ:

  • Программа на языке Quick Basic находится в файле с расширением "*.bas";
  • Основная программа начинается с первого ее оператора;
  • Желательно "нумеровать" все строки файла метками - натуральными числами. Нумерацию строк желательно начинать с числа 10 и задать шаг нумерации тоже 10;
  • Заканчиваться вычисления в программе должны оператором: " STOP ";
  • Завершаться описание всех алгоритмических конструкций в программе необходимо оператором: " END ";
  • На каждый оператор выделяется одна строка;
  • Комментарии к строкам алгоритма должны начинаться отдельной строкой, после ключевого слова: " REM ", которые указываются сразу после метки (или вместо метки);
  • Подпрограммы на языке: "Quick Basic", оформляются отдельно, внутри файла;
  • Оформление подпрограмм начинается с ключевого слова: " SUB ", за которым идет имя подпрограммы;
  • Выполнение программы на языке "Quick Basic", открытой в его оболочке ("qbasic.exe"), начинается после выбора меню: "Run" -> "Continue", или нажатием клавиши: "F5".
  • 3.2.3.2. C/C++

    На языке Си и, частично, С++, существуют следующие правила оформления программ:

  • Программа на языке Си находится в файле с расширением: "*.c", а на языке C++ - с расширением "*.cpp";
  • Файлы с "заголовочной частью" к основной программе находятся в файлах с расширением "*.h" и "*.hpp";
  • Основная программа (которая затем будет запускаться по имени файла, например, "myprog.exe"), должна иметь имя и расширение "myprog.c". То есть, в общем случае, имя основного файла проекта - "<имя проекта>.c" (для программ на Си) или "<имя проекта>.cpp" (для программ на языке С++), где <имя проекта> будет соответствовать имени Вашей программы после компиляции;
  • Файл с программой начинается с включения (в заголовочной части) файлов с расширением "*.h" и "*.hpp", с помощью прагма оператора: " include ". При этом имена заголовочных файлов, находящихся в одном каталоге с файлами-описаниями алгоритма, заключаются в кавычки, а имена файлов, пути к которым прописаны в переменной операционной системы: " INCLUDE ", заключаются между знаками: "<…>", например:
  • #include <stdio.h>
  • #include "myprog.h"
  • Далее в файле с основной программой задается основная функция алгоритма: " main ", - управляющая вызовом всех остальных функций и подпрограмм.Примечание: при программировании на языке Си с использованием библиотеки Windows API основной функцией алгоритма становится функция: WinMain. Подробнее об этой функции смотри [89].
  • Функция " main " из пункта 5 может возвращать целое значение (тип "int"). Это значение впоследствии используется при запуске функции внутри командного файла оболочки операционной системы, для его реакции на неудачный результат работы этой функции. Принято, что в случае успешного результата своей работы функция " main " возвращает нулевой результат.
  • Функция " main " может принимать в качестве аргументов следующие формальные параметры:

    main( int argc, char *argv[], char *env[]), где

  • argc - число аргументов у функции. Эта переменная принимает значение 1 в случае отсутствия опций и параметров, 2 в случае присутствия одного параметра и т.п.;
  • *argv[] - массив символьных переменных - указателей на опции и аргументы программы, запускаемой из командной строки. При этом элементу "0" соответствует полное путевое имя файла с запускаемой программой. Элементам с номерами: "1" - "argc-1" соответствуют аргументы программы, набранные в командной строке, с соответствующими номерами (по-порядку);
  • *env[] - массив символьных переменных - указателей на системное окружение операционной системы, в которой запускается скомпилированная программа.
  • Комментарии на языках: "Си" и "С++" обозначаются следующим образом:
  • Игнорирование конца строки вслед за комментарием: "//" ;
  • Игнорирование текста внутри "скобок" - спецсимволов: "/* … */".
  • Тексты-описания функций и процедур на языке: "Си" располагаются либо после описания функции " main ", либо в отдельных файлах (с расширениями: "*.C" и "*.CPP" соответственно для функций "Си" и "С++").
  • В "заголовочных файлах" (с расширением: "*.h" и "*.hpp") задаются, во-первых, директивы компилятору на обработку файлов, во-вторых, макрофункции и макроподстановки, в-третьих, определения констант и глобальных переменных в программе, и, в-четвертых, объявления функций. Формат описания заголовочной части смотри в приложении I к данной лекции и в книге [31].
  • Перед запуском программы, написанной на языках Си и С++, необходимо сначала "скомпилировать" модули и "построить", скомпоновать (" Build ") проект в IDE (с именем: "<имя проекта>" ), а затем запустить ее, либо набрав в командной строке: <имя проекта>.exe {<опции>}*, либо щелкнув на иконке этой программы (в Windows).
  • Подробнее о других аспектах программирования на C/C++ смотри: [31, 51, 92,78]

    3.2.3.3. Perl

    В языке Perl существуют следующие правила оформления программных модулей:

  • Программа на языке Perl находится в файле с расширением: "*.pl".
  • Начинаться программа должна с директивы компилятору, имеющей следующий синтаксис:
    #!<путь к интерпретатору Perl> {<опции>}

    Например:

    #!/usr/bin/perl
  • для интерпретатора perl в UNIX, и
    #!perl -w
  • для интерпретатора perl в Windows. Опция -w означает: "включить отладку сценариев"
  • Основная программа начинается с первого ее оператора, а заканчивается - концом файла или оператором описания функций " sub ".
  • Комментарии на языке Perl обозначаются как: "#". Все символы, набранные после этого знака, игнорируются интерпретатором.
  • Описание подпрограмм и функций начинается со слова " sub ", после которого идет блок с операторами. Подпрограмма завершается при выходе из этого блока:
    sub <имя функции> {<тело функции>}
  • Вызов подпрограммы осуществляется следующим образом:
    [<переменная>=] '<имя функции> [(<аргументы>)]
    где <переменная> - присвоенное значение-результат работы функции; <имя функции> - имя, зарезервированное в 3.4. Аргументами могут быть строковый литерал либо ссылка:
    <аргументы> ::= {<литерал>|\<имя фактического параметра>}+
  • Объявление процедур осуществляется либо сразу же после основной функции, либо в отдельном файле-библиотеке (расширение - "*.pl") или модуле (расширение - "*.pm"). Подробнее о реализации библиотек и модулей см. [59]. Стандартные же шаблоны оформления модулей и библиотек см. в [приложении App03002].
  • Доступ к аргументам (как основной программы, так и функций) осуществляется через переменную: " @_ ".
  • Программа ("макрос", "скрипт") на языке Perl может выдавать целое значение при выходе из нее (с помощью функции: " exit( <целое число> ) "). По "джентльменскому соглашению" программа возвращает "0" в случае своего нормального завершения.
  • Для запуска макросов в командной строке необходимо набрать:
    perl <полное имя макроса> {<аргументы>}
    где <полное имя макроса> - имя программы (с расширением: "*.pl") вместе с его путевым именем; <аргументы> - передаваемые программе аргументы-значения.
  • Примечание. Если в качестве аргументов используются имена файлов, необходимо указывать их полные путевые имена. Примечание. В приложении III к данной лекции представлены тексты командных файлов Windows, с помощью которых можно "облегчить" выполнение сценариев на Perl, указывая не абсолютные путевые, а "относительные" имена файлов. Инструкция к ним прилагается.

    3.3. Резюме процедурной парадигмы

    В данной лекции Вы познакомились с процедурной парадигмой и ее реализациями на языках Quick Basic, Си/C++ и Perl. В приложениях и пунктах для самостоятельной работы Вы легко разберетесь с особенностями программирования на языках оболочек операционных систем: MS-DOS Command Shell и BASH shell Linux. Теперь Вы, по крайней мере, можете записать "шапку" с заголовочной частью для указанных языков программирования и сценариев. Собственно записью конструкций алгоритмов мы займемся в следующей лекции.

    3.4. Для самостоятельного изучения

  • Прочтите разделы из [4, 80-83, 84, 85], посвященные синтаксису и семантике командных файлов MS-DOS;
  • Прочтите разделы из [80-83], а также онлайновое руководство по Norton Utilities for DOS, посвященные синтаксису и семантике командных файлов NDOS. Для этого Вам, может быть, потребуется установить Norton Utilities 8.0 Rus из архива;
  • Прочтите разделы из [66] и, у кого есть возможность, справочные файлы к Core Utile bash-shell Linux.
  • Просмотрите текст, приведенный в приложении к данной лекции.
  • 3.5. Глоссарий

    Термин Англ. Термин Разъяснение
    программирование 1. programming 1. Раздел прикладной математики, изучающий и разрабатывающий методы и средства составления, проверки и улучшения программ на ЭВМ.
    программирование 2. programming 2. Процесс подготовки задач для их решения на ЭВМ. Включает следующие этапы: во-первых, поиск алгоритмического решения, во-вторых, составление программы на языке ЭВМ, в-третьих, трансляция с языка программирования на машинный язык.
    алгоритмическое решение algorithmic decision Получение алгоритма решения задачи. Теоретической основой поиска этого решения занимается наука алгоритмика.
    составление (программ) building (of program) То же, что и кодирование.
    кодирование (программ) coding (of program) Составление (запись) алгоритма на одном из языков программирования.
    трансляция (программы) translation (of program) Перевод инструкций (операторов) языка программирования ЭВМ в ее машинные коды. Трансляцию выполняют специальные программы-трансляторы: компиляторы и интерпретаторы.
    машинный код code of machine Двоичный код (цифры), в котором специфичным для данной ЭВМ правилам кодируются данные и программы, посылаемые ей на исполнение.
    программа program Полное и точное описание на некотором формальном языке предназначенных к выполнению работ, с учетом всех обстоятельств, общих целей и условий, на основании ранее найденных алгоритмов и имеющихся средств ЭВМ. Текст программы является официальным ее документом.
    текст программы text (of program) Последовательность операторов языка программирования, на котором написана программа. Текст является официальным документом ЕСПД в проекте.
    язык (программирования) programming language Формальный язык, состоящий из переменных, операторов, операций и других синтаксических конструкций, применяемых для описания информации (данных) и алгоритма (программы) для их отображения на ЭВМ.
    оператор (языка программирования) operator (of programming language) Предписание в данном языке программирования, предназначенное для задания некоторого завершенного действия в процессе обработки информации на ЭВМ.
    парадигма программирования paradigm (of programming) Совокупность правил, концепций, взглядов, стандартов, "моды", по которым в то или иное время пишутся программы программистами. Выбор парадигмы однозначно определяет язык программирования, синтаксис и описание различных конструкций (операторов) этого языка, использование и представление структуры данных, стандарты в написании программ и комментариев. Наиболее востребованными в настоящее время являются следующие парадигмы: процедурная (или модульная), функциональная, структурированная, логическая, объектно-ориентированная (ООП), хотя существуют и другие парадигмы.
    структура данных data structure Упорядоченное множество элементов данных, не зависящее от их физической реализации, вместе с "разрешенными" операциями над этими данными. Примерами структуры данных могут служить база данных, база знаний, формат файлов для приложений, документ XML, язык разметки, графический файл и т.п. Н. Вирт предложил формулу: "программа" := "алгоритм" + "структура данных".
    процедурная парадигма procedural paradigm Парадигма, гласящая: "Реализацию алгоритмов вычислений необходимо создавать с помощью мелких, не зависимых друг от друга процедур, которые вызывают друг друга в соответствии с логикой программы". На структуру данных ограничения не накладываются (программа управляет данными).
    модульная парадигма modular paradigm см. процедурная парадигма
    структурированная парадигма structural paradigm Развитие идей модульной парадигмы, гласящее следующее: "Каждая подпрограмма должна иметь ограниченный объем, выполнять одну специфичную функцию для обработки данных и использовать только три базовых элемента алгоритма: линейную, ветвящуюся и циклическую структуру". Основная цель структурированного программирования - создание программы с минимальными взаимосвязями модулей.
    объектно-ориентированная парадигма object-oriented paradigm Парадигма, ориентированная на работу с "объектами" и "сообщениями". Объект - это пакет информации (структурированные данные) вместе с описанием процедур ("методов") манипулирования ими, а сообщение - это условие одного из методов. В отличие от модуля процедурной парадигмы, сообщение только определяет, что желает выполнить отправитель сообщения, а получатель точно определяет, что должно произойти.
    логическая парадигма logic paradigm В этой парадигме в качестве "единого алгоритма" вычислений является алгоритм символьной логики, управляющий всеми операциями с данными. Все языки в этой парадигме являются декларативными языками.
    императивные языки imperative languages Языки программирования, в которых "код управляет данными". В этих языках даются инструкции по пошаговому выполнению алгоритмов, осуществлению строгой последовательности действий, а данным и их структуре отводится второстепенная роль. Императивные языки незаменимы при написании драйверов устройств, командных файлов и других программных средств, работающих в "командном режиме".
    декларативные языки declarative languages В данных языках программирования "данные управляют программой". От значения данных, поступающих на вход программы, зависит направление расчетов. При этом алгоритм обработки данных является стандартным и как бы "зашит" в язык программирования.
    инструкция instruction Предписание исполнителю (человеку или автомату) на выполнение тех или иных операций. В языке программирования инструкцией может быть прагма оператор, оператор, выражение, объявление функции или переменной.
    пошаговое (выполнение) step-by-step (executing) Выполнение алгоритма последовательно, инструкция за инструкцией, в порядке их появления в программе.
    символическая логика symbolic logic Представление формальной логики на основе формализованного языка.
    формальная логика formal logic Наука о методах анализа высказываний и доказательств, в которой рассматриваются абстрактные символы и сформированные из них высказывания, но не придается никакого значения семантике этих абстракций.
    последовательность действий sequence of operation Правило, по которому любой алгоритм выполняется последовательно, инструкция за инструкцией, а не в произвольном порядке. Линейная последовательность действий при этом может нарушаться при использовании ветвлений и циклов, а также безусловных переходов.
    линейная последовательность linear sequence Последовательность действий, при которой алгоритм выполняется шаг за шагом, инструкция за инструкцией, от начала последовательности до ее конца. Алгоритм, состоящий только из одной линейной последовательности действий, называется линейным алгоритмом. Линейная последовательность действий внутри ветвления или цикла называется его телом.
    тело body Линейная последовательность инструкций внутри цикла, ветвления или процедуры.
    данные data Представление различной информации в виде, позволяющей автоматизировать ее сбор, хранение, передачу и дальнейшую ее обработку в ЭВМ. Данными могут быть набор знаков, цифр и т.п., над которыми можно выполнять различные операции.
    упорядоченные данные ranked data Данные, обработанные человеком и приведенные в такой вид, что они могут быть переданы последовательно, без дополнительной ручной обработки, на обработку в ЭВМ. Основное свойство упорядоченных данных - способность передавать их в ЭВМ в том же порядке, в котором происходит считывание ею данных для обработки.
    устройство device Устройство для внешней обработки информации, подключенное к ЭВМ. Различают периферийные устройства (внешние устройства, подключаемые к ЭВМ), внутренние устройства (одни из составных частей ЭВМ) и виртуальные устройства (которое моделируется, "эмулируется" программно в памяти ЭВМ).
    факт fact На языке ПРОЛОГ является аналогом данных. Представляет собой некоторое свойство, применимое к значению некоторых переменных, которое само по себе может принимать значение "истина" или "ложь". Например, факт отец(Александр, Юрий) говорит о том, что значение "Александр" связано со значением "Юрий" отношением "отец", и что это отношение - истинно.
    правило rule Представляет собой некоторое свойство ("отношение") между несколькими переменными, которое может быть истинным или ложным, в зависимости от того, совпадают или нет значения переменных с их значениями, записанных в фактах.
    продукция production Правило, по которому из фактов доказывается истинность или ложность заданного утверждения или ищется набор значений переменных, при котором это утверждение истинно. В языке ПРОЛОГ продукции вместе с системой логического вывода генерируют набор значений переменных, при котором все продукции истины.
    экспертная система expert system Программа, написанная инженером по знаниям, позволяющая моделировать рассуждения эксперта в некоторой области знаний, делать вместо него выводы и объяснять полученные результаты. Экспертные системы пишутся, как правило, на языке ЛИСП или ПРОЛОГ.
    транслятор (языка программирования) translator (of the programming language) Программа, переводящий алгоритм, написанный на языке программирования высокого уровня, в объектный код или в псевдокод исполнителя. По этому принципу трансляторы делятся на компиляторы и интерпретаторы.
    компилятор compiler Транслятор, преобразующий текст программы в объектный код.
    интерпретатор interpreter Транслятор, преобразующий текст программы на языке высокого уровня в псевдокод, немедленно исполняющийся на компьютере. К "интерпретируемым" языкам относят языки: "Бейсик", "Perl", "Python", Java и т.д.
    объектный код object code Код, генерируемый компилятором, который максимально приближен к машинным кодам ЭВМ. В готовую к исполнению на ЭВМ программу этот код преобразуется при помощи компоновщика.
    псевдокод pseudocode Некоторый код, не обязательно являющийся машинным кодом, который может исполняться ("интерпретироваться") программой-оболочкой. К "псевдокодам" относят: "польскую запись" выражений, псевдокод Java, псевдокод Net Framework, псевдокоды Perl, Basic, Python и других макроязыков.
    искусственный интеллект artificial intelligence Совокупность алгоритмов, реализующих действия, ранее выполняемые только человеком. Искусственным интеллектом также называется часть информатики, алгебры и т.п., изучающая эти алгоритмы.
    архитектура "фон Неймана" von Neumann machine Любая ЭВМ, удовлетворяющая следующим требованиям. Во-первых, ее основные блоки - устройство управления, арифметико-логическое устройство и устройство ввода-вывода. Во-вторых, программы и данные хранятся в одной и той же памяти. В-третьих, устройство управления и арифметико-логическое устройство, вместе со "сверхоперативной" памятью, объединенные в "центральный процессор", определяют действия, подлежащие выполнению, считывая инструкции из оперативной памяти.
    калькулятор calculator Прибор для "ручного" счета численных величин, прежде всего, их сложения, вычитания, умножения, деления, нахождения "обратной" величины и извлечение квадратного корня. Калькуляторы делятся на бухгалтерские, инженерные и программируемые калькуляторы.
    ассемблер assembler Язык программирования "низкого уровня", максимально приближенный к "машинным кодам". Программирование на ассемблере позволяет создавать эффективные программы, однако размеры текста программы и время отладки программы являются столь большими, что ограничивает использование ассемблера только задачами написания драйверов, критически важных программ и утилит.
    архитектура ЭВМ computer architecture Описание некоторой вычислительной системы на некотором общем уровне. Включает: описание возможностей программирования, системы команд, тип пользовательского интерфейса, организация памяти и тип ее адресации, базовые операции ввода-вывода, управления и т.п. Общность архитектуры разных ЭВМ обеспечивает их совместимость с точки зрения программ пользователя.
    регистр register Сверхоперативная память центрального процессора ЭВМ, служащая для быстрого доступа и временного хранения исходных данных, результатов операций, счетчиков, адресов памяти и т.д.
    процессор processor Устройство управления компьютером, арифметико-логическое устройство, регистры, объединенные в единое целое и управляющее ходом вычислений, работой устройств ввода-вывода, осуществляющее полное управление компьютером. Кроме собственно процессоров (по-другому - центральных процессоров) существуют так называемые сопроцессоры.
    сопроцессор coprocessor Процессор, осуществляющий дополнительные вычисления на компьютере, но, в отличие от центрального процессора, не управляющий работой компьютера. Как правило, сопроцессоры управляются центральным процессором. К сопроцессорам относят математический сопроцессор, специализированные ЛИСП- и ПРОЛОГ- процессоры.
    прикладной программист applications programmer Лицо, специализирующееся в написании прикладных программ.
    прикладная программа application Программа, способствующая выполнению задачи, возложенной на данную ЭВМ. Прикладными программами могут быть бухгалтерские, финансовые, офисные, научные, инженерные, графические, издательские и т.п. программы. Прикладные программы следует отличать от операционных систем и средств разработки, несущих "общесистемные" функции.
    процедура procedure Смотри модуль программный.
    модуль (программный) module Программа, используемая в качестве составной части других программ, либо как самостоятельная программа автономного приложения.
    функция function Программный модуль, возвращающий одно (и только одно) значение функции. Этим это определение похоже на определение функции в "алгебраическом" смысле. Функция может содержать формальные параметры.
    объявление declaration Указание имени, типа переменных, функций и ее параметров перед их использованием или описанием. В языках Си/С++ объявление всегда должно предшествовать описанию и использованию переменных/функций/параметров.
    Язык C-- C-- language Один из клонов языка Си, содержащий множество функций и "вставок" на языке ассемблер. Этот язык подходит для написания драйверов к операционным системам.
    драйвер driver Программа, управляющая работой какого-либо устройства ЭВМ, которая позволяет операционной системе и прикладным программам осуществлять ввод-вывод на это устройство, не прибегая к "прямому" программированию устройства в машинных кодах. Для разных устройств и для разных операционных систем существуют свои драйверы. Однако существуют и "универсальные" драйверы устройств.
    командный файл command file Файлы командной оболочки операционной системы, предназначенные для автоматизации часто выполняемых операций в командной строке.
    алгоритм algorithm Сформированный на некотором (естественном или формальном) языке набор правил-инструкций, указывающий на действия, последовательное выполнение которых приводит от начальных данных к конечному результату.
    подпрограмма subroutine Программный модуль, не возвращающий своего значения, а передающий измененные значения через формальные параметры по ссылке.
    ФОРТРАН FORTRAN Аббревиатура от "FORmula TRANslator" - "переводчик формул". Язык модульной парадигмы программирования, предназначенный для "кодирования" численных вычислений, прежде всего для научных расчетов.
    численные алгоритмы numerical algorithm Алгоритмы численных расчетов, применяемых в научной и экономической областях. Численные алгоритмы позволяют проводить "глубокую и сложную обработку" небольшого количества исходных численных значений.
    коммерческие алгоритмы algorithm for business Алгоритмы численных расчетов, применяемых в бизнесе и экономике. Эти алгоритмы позволяют проводить несложную числовую обработку большого количества исходных данных, расположенных на разных носителях.
    КОБОЛ COBOL Аббревиатура от "Common Business Oriented Language" - "язык, ориентированный на общий бизнес". На этом языке пишутся коммерческие алгоритмы по хранению и обработке коммерческих данных на различных носителях информации.
    Quick Basic ("квик бейсик") Quick Basic Реализация интерпретатора языка Бейсик от корпорации Microsoft. Эта версия бейсика работает на операционных системах, начиная с MS-DOS 6.0
    расширение (файла) extension (of the file) Часть имени файла, расположенная в конце его имени и отделенная от остальной части имени файла знаком "точка" ("."). По расширению файла обычно определяют тип и назначение этого файла.
    имя программы program name Имя файла исполняемой программы (вместе с ее расширением), которое необходимо набрать в командной строке для ее запуска. Кроме имени программы, при запуске из командной строки также необходимо бывает указать опции и аргументы-значения.
    аргументы-значения value of arguments Параметры (опции, аргументы, имена файлов, переменных среды и т.п.), передаваемые команде в качестве фактических параметров при ее вызове из командной строки. Список и тип "формальных параметров", необходимых для запуска команды, можно получить, задав в качестве параметров функции одно из следующих значений: "/?", "-?", "-h" или "-help".
    оператор "STOP" STOP operator Оператор языка Бейсик вообще и Quick Basic в-частности, который останавливает выполнение основной программы и передает управление оболочке (IDE) интерпретатора. Этот оператор может встречаться в любом месте программы.
    оператор "END" END operator Оператор языка Бейсик вообще и Quick Basic в-частности, который сигнализирует о конце выполняемой программы. Все строки, написанные после этого оператора, игнорируются. Оператор "END" должен быть последним оператором в программе.
    комментарий remark Строка текста внутри файла с программой (макроса), которая служит для пояснения действий программиста. Информация из комментария не обрабатывается транслятором языка и не участвует в алгоритме. Строки комментария обязательно помечаются специальными знаками, чтобы их было легко отделить от текста программы.
    ключевое слово "SUB" SUB keywords Ключевое слово на языке Quick Basic, с которого начинается описание процедуры на этом языке. Текст за этим ключевым словом "скрыт" оболочкой (IDE) программы Quick Basic.
    оболочка Quick Basic Quick Basic shell Синоним IDE (интегрированное окружение разработчика) для интерпретатора Quick Basic
    пуск, прогон run Пункт меню IDE, в котором собраны команды управления запуском и отладкой транслированной программы на одном из языков.
    продолжить continue Пункт меню IDE, подающий команду внутреннему отладчику IDE на запуск остановленной ранее программы с текущей позиции. Эта программа применяется, например, после чтения значений в точке "останова", или для отмены "пошагового", с остановом после каждого оператора, режима работы отладчика.
    присвоение значений assignment of values Оператор, который записывает в оперативную память ЭВМ новое значение переменной. При этом старое значение теряется безвозвратно! Присвоенным значением может быть значение переменной, выражения, константы или вызова функции.
    оперативная память on-line storage Одно из основных "внутренних" устройств компьютера, предназначенное для временного хранения данных и кода программ (см. архитектура фон Неймана).
    идентификатор identificator Любое сочетание латинских букв и цифровых знаков, начинающееся с буквы. Практически во всех языках программирования имена переменных, операторов, процедур и функций, а также макросов и прагма операторов могут быть только идентификаторами.
    фактические параметры actual parameters Значения констант, переменных, выражений, вызовов функций, которые передаются процедуре или функции, замещая формальные параметры. Фактические параметры ставятся в соответствие формальным параметрам при вызове функций. Фактические параметры могут передаваться функции по ссылке или по значению, в зависимости от типа формальных параметров.
    формальные параметры formal parameters Переменные, объявленные при описании функции и процедур, в ее заголовке, хранимые в стеке модуля программы и использующиеся в теле модуля при вычислениях. Тип фактических параметров должен обязательно совпадать с типом формальных параметров.
    стек (системный) stack (of the system) Область в оперативной памяти ЭВМ, которая работает по принципу: "последним записан" - "первым считан" (имеет английскую аббревиатуру "LIFO"). Системный стек используется для передачи значений функций и процедур, для временного сохранения значений, записанных в регистре процессора.
    по значению by value Способ передачи фактических параметров, когда в стек заносится значение переменной, выражения и т.п. После выхода из модуля стек "очищается", таким образом, значение, сохраненное в стеке, теряется. Передача данных по значению проста в реализации, безопасна, поэтому по-возможности следует использовать именно ее.
    по ссылке by links Способ передачи фактических параметров, когда в стек заносится "адрес" переменной - фактического параметра в оперативной памяти, а программа сама обеспечивает "синхронизацию значений" переменной в теле функции и в оперативной памяти. После "очистки" стека значение переменной, расположенной в оперативной памяти, сохраняется. Передача значений по ссылке небезопасна!
    тип формального параметра type of formal parameter Тип переменной формального параметра, указанный при объявлении функции. Тип этой переменной определяет, как будут заноситься в стек эти параметры.
    тип фактического параметра type of actual parameter Тип переменной фактического параметра, используемый при подстановке значений формальных параметров. Тип фактических параметров должен строго соответствовать типу формальных параметров. Если это не так, то необходимо использовать операцию приведения типов.
    переменная variable Идентификатор, используемый для обозначения некоторой хранимой в оперативной памяти величины, которая может быть изменена во время выполнения программы.
    выражение expression Компонент языка программирования, определяющий способ вычисления некоторого значения переменной.
    константа 1 constant 1 Величина, значение которой не меняется. Эта величина может быть записана как идентификатор (для иллюстрации см. переменная).
    константа 2 constant 2 Величина, значение которой определяется ее обозначением.
    арифметическое выражение arithmetic(al) expression Выражение, содержащее в себе вызов арифметических (алгебраических) функций и арифметических операций: "сложение", "вычитание", "умножение", "деление", "возведение в степень". Арифметическое выражение возвращает целое или вещественное число, имеющее допустимый для данного языка тип значения.
    логическое выражение logic expression Выражение, содержащее в себе операции: "арифметического отношения", "конъюнкции", "дизъюнкции", "логического отрицания", "исключающего ИЛИ", а также вызовы функций, возвращающих логическое значение. Логическое выражение возвращает число целого или булевского типа, в зависимости от языка программирования.
    символьное выражение character expression Выражения над символьными строками, включающие в себя операции конкатенации, поиска и замены по образцу, разбиения строк на фрагменты, валидация, перекодирование и другие операции. Операции над символьными данными изучаются дисциплиной "формальная грамматика".
    заголовочная часть (программы) header (of a program) Часть текста программы, содержащая в себе прагма операторы, описание переменных, констант и объявление функций, необходимых для правильной работы алгоритма. Если один и тот же заголовок используется более чем одним файлом с описанием алгоритма, то их имеет смысл вывести в отдельный заголовочный файл. На языке C++ этот файл имеет расширение "*.h" или "*.hpp".
    оператор "#include" #include directive Прагма оператор для "включения заголовочной части" к файлу с описанием алгоритма (например, на языках Си/C++). См. заголовочная часть программы.
    основная функция программы main function Главная, основная функция программного продукта, которая содержит "в общих чертах" весь алгоритм работы и управляет вызовом всех остальных процедур. Основная функция появилась впервые в структурированной парадигме программирования на языках Паскаль и Си. На языке Си основной функцией является функция "main" в MS-DOS и "WinMain" в MS-Windows.
    Windows API Windows API Библиотека стандартных функций для языков программирования, позволяющая создавать приложения Windows на стандартном языке программирования. В отличие от других библиотек, библиотека Windows API работает на "нижнем" уровне программирования, поэтому созданные с ее помощью программы имеют очень "объемный" код.
    вызов функции call of the function Передача управления функции или подпрограмме с последующим возвратом к основной программе по окончании ее выполнения. Возможен возврат значений, измененных в результате работы функции.
    успешный результат success result Результат работы функции, завершившейся в "штатном" режиме, без возникновения ошибок, отказов, "исключительных ситуаций", происходящих от некорректных данных. При успешном результате функция заполняет внешние и внутренние переменные "нормальными" значениями, и выдает целое число. По "джентльменскому соглашению" функция возвращает "0" при своем удачном завершении.
    макрофункция macro function Вид функций в языках программирования, при которых не происходит прерывания программы, не используется стек и не происходит обращения к коду функции по адресу, а происходит просто "повторное использование кода" путем многократной вставки текста макрофункции в текст программы. Макрофункции ускоряют работу программ, однако их код используется не эффективно.
    макроподстановка macro substitution Подстановка в макрофункцию вместо ее формальных параметров фактических параметров (без использования стека), путем простого поиска и замены фрагмента текста. Макрофункции и макроподстановки широко используются в языках Ассемблер и Си.
    арифметическое отношение arithmetic(al) ratio Арифметическое отношение между двумя целыми или вещественными числами (вида: "равно", "не равно", "больше", "больше или равно", "меньше", "меньше или равно" и т.п.). На реализацию арифметических отношений между числами в языках программирования накладываются ограничения на представления (типов) чисел в компьютере (см. часть G).
    конъюнкция conjunction Логическое И. Результат операции истинен только тогда, когда истины обе из посылок (утверждений, отношений и т.п.)
    дизъюнкция disjunction, alternation Логическое ИЛИ. Результат операции истинен только тогда, когда истина хотя бы одна посылка или две сразу.
    логическое отрицание negation Преобразует ложное высказывание в истинное, а истинное - в ложное.
    логическое "исключающее ИЛИ" logical "excluding OR" Результат операции истинен тогда, когда обе посылки или обе истины, или обе ложны.
    конкатенация concatenation Соединяет ("бесшовно") две произвольные строки в одну строку. Порядок строк имеет значение!
    поиск по образцу search by the pattern Ищет в строке (или во всем тексте) очередное вхождение подстроки-образца, и выдает позицию его вхождения.
    образец pattern Строка символов, с которой сверяют найденный фрагмент в тексте. Может быть строкой "обычных символов" (т.н. "литералов"), а может содержать в себе регулярное выражение.
    замена фрагмента replacing of a fragment of the text Операция замещения найденного по образцу текста другим текстом, которым может быть только "литерал".
    разбиение строки 1. breakdown of a line Операция, при которой содержимое строки с текстом на экране дисплея (или в текстовом редакторе) разбивается на две или большее число менее длинных строк.
    разбиение строк 2. partition of strings Общее название операций над символьными строками, при которых из "единой" текстовой строки изымаются ее фрагменты, а также производится разбивка одной строки на несколько более коротких строк (операция, обратная конкатенации).
    компоновка (программы) build (of a program) В IDE - процесс компиляции и создания исполняемого файла (c расширениями *.com, *.exe, *.dll, *.ocx, *.so и др.) из текста программы на языке программирования и, возможно, подготовка к его отладке в том же IDE.
    Perl Perl Язык программирования "высокого уровня" предназначенный для обработки символьных данных путем создания исполняемых макросов. Этот язык - интерпретируемый, императивный, кросс-платформенный. Он широко используется в системном администрировании, для написания сценариев в Интернете, для предварительной символьной обработки данных.
    переменная "@_" variable "@_" Специальная переменная языка Perl, предназначенная для передачи "фактических параметров" основной функции или подпрограмме на языке Perl. При этом данные могут передаваться либо по значению, либо как "разыменованный указатель на переменную" типа "массив" и "ассоциативный массив".
    функция "exit" exit function Функция на языках Си, C++, Perl и др., при вызове которых происходит завершение работы программы и возврат целого значения операционной системы. Эта функция используется для того, чтобы передать системе код ошибки, возникших, например, от некорректных данных. Далее это возвращаемое значение может обрабатываться средствами команд оболочки операционной системы.
    валидация validation Проверка на соблюдение синтаксиса и семантики текстом, написанным на некотором естественном или искусственном языке, а также любого текста с языком разметки внутри него. Проверка орфографии является одним из примеров валидации.
    перекодирование recoding Преобразование символов некоторого языка из одной кодовой страницы в другую.
    кодовая страница codepage Способ назначения литерам латинского или иного алфавита уникального кода, состоящего из целых чисел, для дальнейшей их обработки на ЭВМ.
    литерал literal В языках программирования - строка литер (символов), значение которых определяется этими символами и их порядком. Литералы каким-либо способом выделяются в тексте программы. Литералами не являются: операторы, имена констант/функций, теги и другие специальные конструкции языка. В то же время литералами могут быть константы, строки, внешние опции и команды, подаваемые на вход программы и т.п.
    программный интерфейс application interface Характеристика для связи ("сопряжения") нескольких программных модулей. Характеризуется точным описанием использования формальных и фактических параметров, имен глобальных переменных, унификация в имени и параметрах схожих по назначению функций. Программист может использовать программный интерфейс в своих разработках, ничего не зная о его реализации, и все будет работать правильно!
    API API Расшифровывается как "Application Programming Interface" - интерфейс прикладного программирования. Представляет собой стандарт на программный интерфейс внутри библиотеки программ или операционной системы, средой разработки.
    библиотека library Совокупность отдельных программ и программных пакетов, которые предназначены для всеобщего использования в какой-либо определенной среде. Компоненты этой библиотеки не обязательно должны быть связанными.
    комментарии remarks Вставленные в текст программы символы, игнорируемые компилятором и служащие для облегчения понимания синтаксических конструкций, написанных программистом. Обычно комментарии в программе "заключаются" между специальными символами, реже вводятся отдельным оператором.
    метка label Число или идентификатор, поставленный в начале какого-либо ("помеченного") оператора, на который будет передаваться управление в результате выполнения операции безусловного перехода. Эта метка должна иметь имя, уникальное среди всех меток и/или идентификаторов.
    ключевое слово keyword Символический идентификатор в языке программирование, имеющее особое значение для компилятора или интерпретатора. Эти слова помогают при анализе выражений языка и создании программы. Идентификаторы переменных, функций, констант, меток и т.п. не могут совпадать с ключевыми словами.
    основная программа main program Модуль при создании программного проекта, который предназначен для управления всеми остальными подпрограммами проекта, содержит запускающий файл, и файл с ним имеет имя "имя проекта". В языке Си основная программа проекта имеет имя: "main".
    основной файл проекта project's main file См. Основная программа
    прагма оператор pragma operator Оператор, служащий для подачи компилятору проекта определенной информации. См. директивы компилятору.
    запуск команды run of a command Запуск скомпилированной программы на исполнение. Обычно осуществляется либо набором имени файла с программой в командной строке и нажатием клавиши: "Enter", либо двойным щелчком левой клавишей мыши на значке программы в файловом менеджере.
    скрипт script См. командный файл
    макрос macros См. командный файл
    успешный результат success result Результат выполнения команды пользователя, программы и т.п., при которых ее выполнение прошло "в штатном режиме", без возникновения ошибок или исключительных ситуаций. По-умолчанию при успешном результате выполнения программы он возвращает операционной системе значение: "0".
    аргумент arguments Собирательное название формальных параметров процедуры, опций и параметров команд, программ, командных файлов, макросов, скриптов и т.п.
    опция option Не обязательное вхождение в командной строке команды символов, которое изменяет алгоритм, последовательность операций алгоритма и т.п. С помощью опций можно во много раз повысить функциональность одной и той же команды в командной строке, добавить дополнительные действия либо исключить лишние действия, не создавая нового кода программы.
    параметр parameter Обязательное вхождение в командной строке символов, которое определяет необходимую дополнительную информацию (имя файла, имя переменной, режим работы и т.п.), без указания которой команда "не работоспособна".
    командная строка 1. command line Одна из технологий командного интерфейса, в которой пользователь вводит на консоли некоторые команды на выполнения действий, а ЭВМ выдает на ту же консоль результаты выполнения программ.
    консоль console В терминах ЭВМ консоль представляет собой "терминал", т.е. для ввода используется клавиатура, а для вывода - экран дисплея.
    командная строка 2. command line На экране дисплея представляет собой некоторое приглашение на ввод команды (которое можно настроить) и текстовый курсор, в позицию которого вводится текст с клавиатуры. Команды завершаются нажатием клавиши: "Enter". После выполнения команды результат выводится с новой строки, вывод заканчивается символом ввода новой команды.
    массив символьных переменных massive of the character variables Одиночные символы, которые располагаются подряд в ячейках оперативной памяти. Доступ к каждому элементу осуществляется по его индексу. Массив символьных переменных является простейшим способом представления символьных строк. В настоящее время тип: "строка" состоит из массивов символьных данных, к которым добавлена служебная информация для управления ими.
    директивы компилятору directives for compilator Специальные директивы языка программирования: идентификаторы, прагма функции и операторы и т.п., не описывающие алгоритм задачи, а указывающие компилятору, как обрабатывать, оптимизировать код для данного файла с алгоритмом.
    макрофункция macro function Функция, код которой не вызывается внешней программой, а "повторяется" после обработки компилятором. Макрофункция обычно реализуется с помощью директив компилятору. Макрофункции сокращают количество вызываемых подпрограмм, но увеличивает код вследствие повторения одних и тех же участков.
    макроподстановка macro substitution Подстановка тела макрофункции в текст готовой программы в тех местах, где она встретилась.
    глобальные переменные global variables Переменные, объявленные и описанные перед определением главной функции приложения "main" и доступные для всех модулей-подпрограмм.
    компилировать compile Преобразовывать при помощи программы-компилятора исходный текст программы на языке программирования в объектный код ЭВМ.
    скомпоновать build Преобразование объектного кода, сгенерированного в результате выполнения проекта, в код готовой программы для операционной системы. При компоновке устанавливаются связи между программами, назначаются "абсолютные адреса" переменным, определяются "точки входа" для функций и т.п.
    интегрированная среда разработчика Integrated development environment, IDE Программный комплекс, включающий в себя текстовый редактор, компилятор, компоновщик, отладчик и др. утилиты, необходимые для создания и отладки проектов по производству программных продуктов. Обычно IDE поставляются вместе с языками программирования.
    иконка, пиктограмма icon Схематический значок, при двойном щелчке на котором запускается связанная с ним программа, или запускается на редактирование файл в одной из программ. Иконка является важной частью WIMP-интерфейса. Эти значки отображаются на "Рабочем столе" экрана компьютера либо в списках файлов или программ.
    рабочий стол desktop Представляет собой экран компьютера, на котором расположены инструменты управления компьютером, а также значки для запуска приложений и файлов.
    отладка сценариев debugging of the scripts (macros) Нахождение ошибок в программе сценария или макро функций. При отладке сценариев практически не используются внешние отладчики.
    файл-библиотека (Perl) file with library Одиночный файл с макрофункциями, доступный для всех других макросов, созданных на языке Perl. Это очень простой способ для повторного использования кода в Perl.
    модуль (Perl) module (of a Perl) Файл с подпрограммами на языке Perl и ссылками на двоичные файлы, содержащийся в системной библиотеке с расширением: "*.pm". В отличие от файлов-библиотек, модули не копируются, а инсталлируются с установлением зависимостей с другими пакетами Perl.

    3.6. Приложения

    3.6.1. Приложение I. Формат "заголовочных частей" (файлов "*.h") языков Си/C++

    В "заголовочные файлы" программ на языке Си/C++ пишется следующая информация:

  • 01. Текст с описанием назначения заголовочного файла;
  • 02. Конструкция для предотвращения повторного использования файла;
  • 03. Другие заголовочные файлы, содержащие константы и объявления функций, используемых в данном файле. При этом должно быть исключено повторное объявление одних и тех же модулей в заголовочных файлах;
  • 04. Вставка необходимых прагма операторов (директив компилятору);
  • 05. Определение констант и макроподстановок;
  • 06. Объявление структур, объединений и перечисляемых типов;
  • 07. Объявление глобальных переменных;
  • 08. Объявление функций.
  • Рассмотрим эти конструкции поподробнее:

    Пункт 01 Текст с описанием назначения заголовочного файла

    Представляет собой следующий шаблон:

    /**********************************************************
     *
     * Файл <имя файла>.H
     *
     * НАЗНАЧЕНИЕ:
     *
     * ЗАВИСИМОСТИ:
     *
     * Copyright (R)
     *
    **********************************************************/

    В нем обязательно нужно указать название файла, назначение констант, переменных, объявлений типов и функций, использованных в данном заголовочном файле. Это нужно сделать "коротко и ясно". Также желательно указать зависимости данного файла с другими заголовочными файлами, а также правообладателя программы (название организации, либо имя и псевдоним, и обязательно контактные данные). Это может потребоваться при внесении изменений в программу в целом и в этот заголовочный файл в частности.

    Пункт 02 Конструкция для предотвращения повторного использования файла

    Представляет собой следующий шаблон:

    #ifndef __"имя файла"_H
    #define __"имя файла"_H
    
    …
    
    #endif
    
    /* Конец заголовочного файла */

    Эта конструкция определяет переменную: " __"имя файла"_H ". Именно использование этой переменной в пункте 3 (вернее, проверка на ее существование) предотвращает повторную загрузку заголовочного файла из самого себя или другого заголовочного файла.

    В конце описания заголовочного файла должно стоять подножие: #endif. Заметим, что использование этих конструкций и правила именования переменных является стандартным приемом "обхода" такого рода проблем.

    Пункт 03 Другие заголовочные файлы

    Вставка других заголовочных файлов представляет собой следующий шаблон:

    /* Включение заголовочных файлов */
    
    #ifndef __"имя файла1"_H
    #include ""имя файла1"".h
    #endif
    
    #ifndef __"имя файла2"_H
    #include <"имя файла2">.h
    #endif
    
    …

    Обратите внимание, что оператор вставки файла " #include " окружен "условными прагма операторами" " #ifndef " и " #endif ". Их использование предотвращает повторную загрузку заголовочных файлов и, таким образом, предотвращает повторное определение или переопределение типов, констант и переменных, указанных в них.

    Пункт 04 Вставка необходимых прагма операторов

    Эти операторы вставляются в текст только по-необходимости, и часто их включения не требуется.

    Пункт 05 Определение констант и макроподстановок

    Сюда вставляются определения констант и макроподстановок, определенных через прагма оператор #define. Конечно, его использование может некоторыми авторами рассматриваться как "анахронизм". Однако оцените его удобство и универсальность!

    Примечание: константы и макрофункции здесь следует набирать прописными буквами (хотя это не обязательно).

    Определение представляет собой следующий шаблон:

    /* Определение констант */
    
    #define "ИМЯ_КОНСТАНТЫ" "значение" 
    
    /* Определение макроподстановок */
    
    #define "МАКРОФУНКЦИЯ"("ПАРАМЕТРЫ") "текст макроса"

    Пункт 06 Объявление структур, объединений и перечисляемых типов

    Объявления представляют собой следующий шаблон:

    typedef struct "tagType"
    {
    	"определение типа Type"
    }"Type";
    
    typedef union "tagType"
    {
    	"определение типа Type"
    }"Type";
    
    typedef enum "tagType"
    {
    	"определение типа Type"
    }"Type";

    Пункт 07 Объявление глобальных переменных

    Иногда необходимо в файле задать переменные, которые будут использоваться сразу несколькими описанными функциями. Эти переменные можно объявить как "глобальные переменные", а не передавать в качестве параметров. Это может создать более понятные и "компактные" программы. Эти объявления можно описать как в заголовочном файле, так и в начале файлов с описанием (определением) нужных функций.

    Объявление представляет собой следующий шаблон:

    /* Объявление глобальных переменных */
    
    	"тип"		"имя"
    	…		…;

    Пункт 08 Объявление функций

    Перед использованием новых функций на языке Си необходимо прежде их объявить, что и происходит в конце заголовочного файла.

    Объявление представляет собой следующий шаблон:

    /* Объявление функций: */
    
    "тип возвр. значения" "имя функции1"("имя и тип формальных параметров"…);
    "тип возвр. значения" "имя функции2"("имя и тип формальных параметров"…);
    …

    Пример шаблона

    /**********************************************************
     *
     * Файл <имя файла>.H
     *
     * НАЗНАЧЕНИЕ:
     *
     * ЗАВИСИМОСТИ:
     *
     * Copyright (R)
     *
    **********************************************************/
    
    #ifndef __"имя файла"_H
    #define __"имя файла"_H
    
    /* Включение заголовочных файлов */
    
    #ifndef __"имя файла1"_H
    #include ""имя файла1"".h
    #endif
    
    #ifndef __"имя файла2"_H
    #include <"имя файла2">.h
    #endif
    
    …
    
    /* Указание директив компилятору: */
    
    …
    
    /* Определение констант */
    
    #define "ИМЯ_КОНСТАНТЫ" "значение" 
    
    /* Определение макроподстановок */
    
    #define "МАКРОФУНКЦИЯ"("ПАРАМЕТРЫ") "текст макроса"
    
    /* Определение типов */
    
    typedef enum tag"имя типа"
    {
    	"константа 1";
    	…
    	"константа n";
    }"имя типа";
    
    typedef struct tag"имя типа"
    {
    	"тип"	"имя поля";
    	…		…;
    }"имя типа";
    
    
    typedef union tag"имя типа"
    {
    	"тип"	"имя поля";
    	…		…;
    }"имя типа";
    
    /* Объявление глобальных переменных */
    
    	"тип"		"имя"
    	…		…;
    
    /* Объявление функций: */
    
    "тип возвр. значения" "имя функции1"("имя и тип формальных параметров"…);
    "тип возвр. значения" "имя функции2"("имя и тип формальных параметров"…);
    …
    
    #endif
    
    /* Конец заголовочного файла */

    3.6.2. Приложение II. Стандартные шаблоны оформления модулей и библиотек на Perl

    Подпрограммы служат для объединения группы операторов с целью их повторного использования. Следующим шагом является объединение группы подпрограмм и их сохранение в отдельном файле для последующего использования в других программах. Для реализации этой задачи в языке Perl присутствуют два механизма: библиотеки и модули.

    3.6.2.1. Библиотеки Perl

    Библиотека представляет собой пакет, областью действия которого является отдельный файл. Иными словами, библиотека - это файл, в качестве первой строки содержащий объявления пакета:

    package "имя пакета"
    Примечание: информацию о том, что такое пакет, можно посмотреть, например, в [59].

    Имя файла библиотеки обычно имеет расширение "*.pl".

    Для использования библиотеки в основной программе ее нужно подключить при помощи директивы компилятору require. О синтаксисе и назначении функции require смотри раздел 3.7.2.3.1.

    3.6.2.1.1. Создание библиотечного файла

    Для создания собственной библиотеки следует выполнить перечисленные ниже шаги:

  • Создать каталог для хранения библиотечных файлов;
  • Сохранить наборы программ в отдельных файлах-библиотеках, и поместить их в этот каталог;
  • В конец каждого библиотечного файла поместить строку: "1:".
  • Последний пункт служит для того, чтобы возвращаемое значение функции require не равнялось нулю.

    Пример:

    # библиотечный файл ~/bin/perllib/mylib.pl
    # знак "~" означает домашний каталог пользователя
    
    "подпрограмма 1"
    
    "подпрограмма 2"
    
    …
    
    1:

    3.6.2.1.2. Подключение библиотечного файла

    Для подключения библиотечного файла из собственной библиотеки следует выполнить перечисленные ниже шаги:

  • Добавить, после начальной директивы Perl, в массив @INC имя каталога, содержащего библиотечные файлы (смотри п. 3.7.2.1.1), либо при запуске основной программы передать это имя интерпретатору Perl при помощи ключа -I;
  • В основной программе использовать директиву require, указав в качестве аргументов имена требуемых библиотечных файлов.
  • Пример.

    #!/usr/bin/perl
    unshift( @INC, "~/bin/perllib");
    require "mylib.pl";
    "тело макроса"
    …

    3.6.2.2. Модули Perl

    Дальнейшим развитием понятия библиотеки явилось понятие модуля. Модуль представляет собой библиотеку подпрограмм, организованную в виде отдельного пакета и обладающими дополнительными свойствами.

    Модуль - это пакет. Пакет представляет собственное пространство имен, в котором для обозначения полного имени используется нотация вида "Родитель" :: "Сын" :: "Внук" :: "имя переменной". Модуль позволяет управлять экспортом своих имен в другие программы, объявляя, какие из них экспортируются по-умолчанию, а какие должны быть явно указаны при экспорте.

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

    В целях управления экспортом каждый модуль должен иметь в себе метод import и специальные массивы @EXPORT и @EXPORT_OK.

  • Вызывающая программа обращается для импорта имен метод import() ;
  • Специальный массив @EXPORT содержит идентификаторы, экспортируемые по-умолчанию;
  • Специальный массив @EXPORT_OK содержит идентификаторы, экспортируемые из модуля только в случае их явного указания;
  • С появлением модулей появилась новая директива для подключения к основной программе: use().
  • 3.6.2.2.1. Создание модуля

    Для создания собственного модуля следует выполнить перечисленные ниже шаги:

  • Создать каталог для хранения модулей. Правила именования каталогов см. [59];
  • Создать пакет с нужным именем (например, "MyModule"), сохранить его в файле "MyModule.pm" и поместить их в этот каталог;
  • Включить в файл имя встроенного модуля Exporter функцией require ;
  • Включить в файл с модулем определение массива @ISA, содержащее название пакета Exporter;
  • Определить имена функций для массивов: @EXPORT и @EXPORT_OK;
  • Записать встроенные функции пакета.
  • Пример файла модуля: MyModule.pm

    package MyModule;
    require Exporter;
    @ISA = qw( Exporter );
    @EXPORT = qw(MyArgs);
    @EXPORT_OK = qw( $MyArgs @MyArgs %MyArgs )
    
    sub MyArgs
    {
    	"тело функции"
    }
    
    # Примечание: вместо имени MyArgs в пакете могут быть определены другие имена переменных и функций
    
    "тело не экспортируемых функций"

    3.6.2.2.2. Подключение модуля

    К основной программе модуль MyModule подключается при помощи директивы use. Эта директива содержит список импорта.

    Обычно список импорта содержит имена переменных и функций. Кроме того, список импорта может содержать некоторые управляющие им спецификации. Спецификация :DEFAULT означает включение в список импорта всех элементов специального массива @EXPORT.

    Пример файла основной вызывающей программы MyMain.pl

    #!/usr/bin/perl
    use MyModule qw( :DEFAULT $MyArgs, @MyArgs %MyArgs );
    "операторы вызывающей программы"
    …

    3.6.2.3. Специальные функции-директивы Perl

    3.6.2.3.1. Функция require

    Функция загружает внешние функции из библиотеки Perl во время выполнения. Она используется для того, чтобы сделать библиотеку подпрограмм доступной для любого из макросов Perl.

    СИНТАКСИС:

    require [EXPR]
    require VERSION

    Если параметр EXPR отсутствует, вместо нее используется специальная переменная $_.

    Если параметр является числом, то он означает, что требуется версия интерпретатора Perl не ниже, чем указанная.

    Если параметр является строкой, функция require включает в основную программу библиотечный файл, заданный параметром EXPR. При этом функция использует две встроенные переменные Perl: @INC и %INC.

    Обычно имена библиотечных файлов имеют расширение: "*.pl". Поэтому для избегания неправильного толкования специальных знаков имена файлов следует заключать в кавычки, например:

    require "myfile.pl"

    Если аргумент является словом без расширения, не заключенным в кавычки, то ему добавляется расширение: "*.pm".

    3.6.2.3.2. Переменные @INC и %INC

    Специальный встроенный массив @INC содержит имена каталогов, в которых надо искать макросы языка Perl, в том числе и библиотеки, подлежащие в выполнению в конструкциях do, require и use. Первоначально он содержит:

  • имена каталогов, переданные при запуске интерпретатору Perl в качестве параметра ключа -I;
  • имена библиотечных каталогов по-умолчанию (зависит от операционной системы);
  • символическое обозначение текущего каталога ".".
  • Специальный встроенный хэш-массив %INC содержит по одному элементу для каждого файла, включенного с помощью функций do и require. Ключом при этом будет имя файла в том виде, в каком она встретилась в функциях do и require, а значением - его полное путевое имя.

    Встретив директиву require, интерпретатор Perl просматривает специальный хэш-массив %INC на присутствие в массиве имени файла. Если да, то выполнение функции завершается. Таким образом, файл может быть включен в список только один раз. Если же этого файла нет, то просматриваются все каталоги из массива @INC в поисках нужного файла. Если файл найден, то он выполняется, иначе генерируется ошибка.

    3.6.2.3.3. Функция use

    СИНТАКСИС:

    use Module [LIST]
    use VERSION

    Эта встроенная функция служит для загрузки модуля в момент его компиляции. Директива use автоматически экспортирует имена функций и переменных в основное пространство имен текущего пакета. Для этого оно вызывает метод: import() импортируемого модуля. Механизм экспорта имен рассчитан таким образом, что каждый экспортируемый модуль должен иметь свой модуль import(). Метод import() должен быть определен в самом экспортирующем модуле, или должен быть наследован у модуля Exporter.

    Если первый аргумент директивы use является числом, он обозначает номер версии интерпретатора Perl. Если версия интерпретатора Perl меньше, чем указанная в директиве use, то интерпретатор завершает работу, выдавая сообщение об ошибке.

    Если список импорта LIST отсутствует, из модуля Module будут импортированы те имена, которые перечислены в специальном массиве @EXPORT, определяемом в самом модуле Module.

    Если список импорта задан, то вызывающую программу из модуля Module будут импортированы только те имена, которые содержатся в списке LIST.

    3.6.3. Приложение III Тексты командных файлов Windows и Linux, с помощью которых можно облегчить выполнение сценариев на Perl.

    01. Файл perlbat.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться на C:\Perl\user\PerlScripts
    perl C:\Perl\user\PerlScripts\%1 Y:\%2 Y:\%3 Y:\%4 Y:\%5 Y:\%6 Y:\%7 Y:\%8 Y:\%9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить макрос, находящийся в директории: C:\Perl\user\PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    02. Файл perlexe.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться в той же директории, что и параметры:
    perl Y:\%1 Y:\%2 Y:\%3 Y:\%4 Y:\%5 Y:\%6 Y:\%7 Y:\%8 Y:\%9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    03. Файл perlbt.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться на C:\Perl\user\PerlScripts
    perl C:\Perl\user\PerlScripts\%1 %2 %3 %4 %5 %6 %7 %8 %9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить скрипт, находящийся в директории: C:\Perl\user\PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.

    Этот командный файл может запускаться только внутри других командных файлов.

    В именах файлов допускаются кавычки, кроме имени файла с макросом (с расширением *.pl, первый параметр).

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    04. Файл perlex.bat

    @echo off
    rem Диску Y: (он должен быть свободен)
    rem назначается имя текущего каталога
    rem командой subst Y: .
    subst Y: .
    rem Вызываем интерпретатор Perl
    rem Скрипт-файл на языке Perl должен
    rem находиться в той же директории, что и параметры:
    perl Y:\%1 %2 %3 %4 %5 %6 %7 %8 %9
    REM Удаляем диск Y:
    subst Y: /D

    С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.

    Этот командный файл может запускаться только внутри других командных файлов.

    В именах файлов допускаются кавычки, кроме имени файла с макросом (с расширением *.pl, первый параметр).

    Букве "Y:" не должно быть назначено имя сетевого или логического диска;

    Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.

    05. Файл perlbat.sh

    #/bin/sh
    #
    # @echo off
    # echo Вызываем интерпретатор Perl
    # echo Скрипт-файл на языке Perl должен
    # echo находиться на /home/имя_пользователя/bin/Perl/user/PerlScripts
    perl /home/имя_пользователя/bin/Perl/user/PerlScripts/$1 ./$2 ./$3 ./$4 ./$5 ./$6 ./$7 ./$8 ./$9

    С помощью данного файла можно запустить скрипт, находящийся в директории: /home/имя_пользователя/bin/Perl/user/PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Данный файл используется в среде ALT Linux для интерпретатора Perl версии 5.x.x.

    06. Файл perlexe.sh

    #/bin/sh
    #
    # @echo off
    # echo Вызываем интерпретатор Perl
    # echo Скрипт-файл на языке Perl должен
    # echo находиться в той же директории, что и параметры:
    perl ./$1 ./$2 ./$3 ./$4 ./$5 ./$6 ./$7 ./$8 ./$9

    С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.

    В именах файлов не допускается использование кавычек.

    Данный файл используется в среде ALT Linux для интерпретатора Perl версии 5.x.x.

    3.6.4. Приложение IV. Описание языков командных оболочек MS-DOS Command Shell и bash shell Linux

    Вернуться к учебному плану