IPB

> Лекция №13.4: Модульная структура программы
Чат
Форум
Загрузка...
 

страницы: 1 2 3 4

Содержание

Пример модуля

В качестве примера мы приведём модуль, содержащий арифметические функции min и max для целых чисел, а также функцию возведения в степень. Все эти функции отсутствуют в стандартном модуле System.

unit my_arifm;
interface
function min(a, b : LongInt) : LongInt;
function max(a, b : LongInt) : LongInt;
function deg(a, b : Real) : Real;

implementation

function min(a, b : LongInt) : LongInt;
begin
 if a > b then
   min := b
 else
   min := a;
end;

function max(a, b : LongInt) : LongInt;
begin
 if a < b then
   max := b
 else
   max := a;
end;

function deg(a, b : Real) : Real;
begin
  deg := Exp(b * Ln(a))
end;

end.

Теперь, подключив этот модуль к любой своей программе, вы сможете пользоваться этими трёмя функциями. Остальные необходимые в работе подпрограммы (например, тригонометрические функции tg, ctg, sec, arcsin, arсcos, arctg, arcctg, arcsec) желающие могут добавить в этот модуль самостоятельно.

Аналогичным образом, полезно единожды написать и отладить подпрограммы, обрабатывающие динамические структуры данных (списки, деревья, стеки и т.п.), сохранить их в специальном модуле, а затем пользоваться ранее проделанной работой вновь и вновь, не тратя времени на повторное программирование. Такой подход очень распространён в программировании вообще и носит несколько неуклюжее название «Повторное использование ранее созданных компонентов»1.

Передача аргументов из командной строки

В лекции 8 мы уже говорили о том, что любая процедура или функция, по сути, является полноценной программой. Но если подпрограммы способны получать аргументы извне, то почему этого не могут делать сами программы?

Однако в языке Pascal нет нарушений единообразия: любая программа тоже способна получать аргументы во время начала работы. Для этого нужно лишь вызывать её из командной строки следующим образом:

<имя_программы> <список_аргументов>

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

В стандартном модуле System, автоматически подключаемом к любой программе на языке Pascal, имеются две функции, позволяющие программе принимать аргументы, переданные из командной строки.

Функция ParamCount : Word возвращает количество аргументов, переданных в программу из командной строки при вызове.

Функция ParamStr(k : Word) : String возвращает k–й аргумент, переданный в программу из командной строки.

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

Например:

program arguments;
var i, k, n : Word;
begin
  n := ParamCount;
 WriteLn('Из командной строки поступило ', n, ' аргументов:');
 for i := 1 to n do
   WriteLn(i, '–й аргумент = ', ParamStr(i));
end.

Если теперь вызвать эту программу из командной строки, скажем, с такими аргументами:

arguments abcd -36 +25.062 -t  /&

то на экране получится следующий результат:

Из командной строки поступило 5 аргументов:
1-й аргумент = abcd
2-й аргумент = -36
3-й аргумент = +25.062
4-й аргумент = -t
5-й аргумент = /&

Хорошим стилем считается включать в программу так называемый внешний help: если в неё можно передавать какие–либо аргументы из командной строки, необходимо сообщить потенциальному пользователю их возможные значения и смысл.

Чаще всего для отображения на экране внешней подсказки используются аргументы ? или /?.

Примером может служить краткая экранная подсказка хорошо известного архиватора 7-zip, которая появляется на экране в случае некорректного обращения к этой программе. Подсказка сообщает пользователю: а) имя программы; б) суть того, что именно появилось на экране; в) правила корректного вызова программы; г) примеры корректного вызова; д) краткий список возможных аргументов (команд и ключей).

7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03

Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...]
       [<@listfiles...>]

<Commands>
  a: Add files to archive
  b: Benchmark
  d: Delete files from archive
  e: Extract files from archive (without using directory names)
  l: List contents of archive
  t: Test integrity of archive
  u: Update files to archive
  x: eXtract files with full paths
<Switches>
  -ai[r[-|0]]{@listfile|!wildcard}: Include archives
  -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
  -bd: Disable percentage indicator
  -i[r[-|0]]{@listfile|!wildcard}: Include filenames
  -m{Parameters}: set compression Method
  -o{Directory}: set Output directory
  -p{Password}: set Password
  -r[-|0]: Recurse subdirectories
  -scs{UTF-8 | WIN | DOS}: set charset for list files
  -sfx[{name}]: Create SFX archive
  -si[{name}]: read data from stdin
  -slt: show technical information for l (List) command
  -so: write data to stdout
  -ssc[-]: set sensitive case mode
  -ssw: compress shared files
  -t{Type}: Set type of archive
  -v{Size}[b|k|m|g]: Create volumes
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
  -w[{path}]: assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
  -y: assume Yes on all queries

Более подробно о правилах организации хорошего интерфейса мы расскажем в следующей лекции.

страницы: 1 2 3 4

Примечания

  1. ^ «Возможность повторного использования ранее разработанных (программных) компонентов» является точным переводом английского термина reusability. Соответственно, reusable components — это компоненты, допускающие многократное использование.
 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"