Модуль – это последовательность логически связанных фрагментов, оформленных как отдельная часть программы.
К модулю предъявляются следующие требования:
1) модуль должен реализовывать единственную функцию, т.е. при построении модуля используется концепция: «один модуль – одна функция». Таким образом, модуль – это элемент программы, выполняющий самостоятельную задачу. На его входе он может получать определенный набор исходных данных, обрабатывать их в соответствии с заданным алгоритмом и возвращать результат обработки, т.е. реализуется стандартный принцип IPO (Input – Process – Output) – вход-процесс-выход;
2) на модуль нужно ссылаться с помощью его имени. Он должен иметь один вход и один выход, что гарантирует замкнутость модуля и упрощает сопровождение программ;
3) модуль должен иметь функциональную завершенность, т.е. выполнять перечень регламентированных операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки;
Язык Си с нуля — Урок 47 — Многофайловые проекты. Создание и подключение. Заголовочные файлы.
4) модуль должен возвращать управление в точку его вызова, в свою очередь, он должен иметь возможность сам вызывать другие модули;
5) модуль не должен сохранять историю своих вызовов и использовать ее при своем функционировании;
6) модуль должен иметь логическую независимость, т.е. результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей;
7) модуль должен иметь слабые информационные связи с другими программными модулями – обмен информацией между модулями должен быть по возможности минимизирован;
8) модуль должен быть сравнительно невелик, т.е. быть обозримым по размеру и сложности. Опытные программисты рекомендуют его размер не более двух страниц распечатки на принтере.
Для достижения независимости модулей часто используется принцип информационной локализованности, который состоит в том, что вся информация о структуре данных, о прототипах функций, констант и т.д. сосредотачивается («упрятывается») в отдельном модуле. Доступ к этой информации осуществляется только через этот модуль (в алгоритмическом языке С/С++ такие модули имеют расширение *.h).
Программирование с использованием модулей называется модульным программированием. Оно возникло еще в начале 60-х годов XX в. Модульное программирование основано на идее использования уровней абстракции, когда вся проблема или комплекс задач разбивается на задачи, подзадачи, абстрагируется и представляется в виде иерархического дерева связанных между собой модулей, в совокупности представляющих создаваемое программное обеспечение (ПО).
Достоинствами модульного программирования является следующее:
· большую программу могут писать одновременно несколько программистов, что позволяет раньше закончить задачу;
· можно создавать библиотеки наиболее употребительных модулей;
· упрощается процедура загрузки в оперативную память большой программы, требующей сегментации;
· появляется много естественных контрольных точек для отладки проекта;
«pip» не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
· проще проектировать и в дальнейшем модифицировать программы.
Недостатки модульного программирования заключаеются в следующем:
· возрастает размер требуемой оперативной памяти;
· увеличивается время компиляции и загрузки;
· увеличивается время выполнения программы;
· довольно сложными становятся межмодульные интерфейсы.
Модульное программирование реализуется через модули – функции. Функция – это область памяти, выделяемая для сохранения программного кода, предназначенного для выполнения конкретной задачи. Другими словами, функция – минимальный исполняемый модуль программы на языке С/С++. По умолчанию функция имеет тип external, и доступ к ней возможен из любого файла программы. Но она может быть ограничена спецификатором класса памяти static.
Функция характеризуется типом, областью действия связанного с функцией имени, видимостью имени функции, типом связывания.
Все функции имеют рекомендуемый стандартами языка единый формат определения. Он имеет заголовок функции, в котором задаются: тип, имя функции и спецификация формальных параметров:
Тип имя_функции (спецификация_параметров) тело_функции
Тип – это тип возвращаемого функцией значения, в том числе void (кроме типов массива или функции). Умолчанием является тип int. Если тип возврата функции не void, то тело функции должно содержать как минимум один оператор return.
Имя_функции – идентификатор, с помощью которого можно обратиться к функции. Он выбирается программистом произвольно и не должен совпадать со служебными словами и с именами других объектов программы.
Однако любая программа на языке С/С++ должна иметь хотя бы одну функцию с именем main – главную функцию, содержащую точку входа в программу.
Спецификация_параметров – список формальных параметров, т.е. переменных, принимающих значения, передаваемые функции при ее вызове. Список формальных параметров перечисляется через запятую. Каждый формальный параметр должен иметь следующий формат:
Тип может быть встроенным (int, long, float, double и т.д.), структурой (struct), объединением (union), перечислением (enum), указателями на них или на функции или классы (class). Имя_формального_параметра представляет собой имя используемой в теле функции переменной. Идентификаторы формальных параметров не могут совпадать с именами локальных переменных, объявленных внутри тела функции.
Объявление формального параметра может содержать инициализатор, то есть выражение, которое должно обеспечить параметру присвоение начального значения. Инициализатор параметра не является константным выражением. Начальная инициализация параметров происходит не на стадии компиляции (как, например, выделение памяти под массивы), а непосредственно в ходе выполнения программы.
В языке С/C++ допустимы функции, количество параметров у которых при компиляции функции не фиксировано, следовательно, остаются неизвестными и их типы. Количество и типы параметров таких функций становятся известными только при их вызове, когда явно задан список фактических параметров. При определении и описании таких функций со списками параметров неопределенной длины спецификацию формальных параметров следует закончить запятой и многоточием.
Каждая функция с переменным количеством параметров должна иметь хотя бы один обязательный параметр. После списка обязательных параметров ставится запятая, а затем многоточие, извещающее компилятор, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции проводить не нужно.
Спецификация_параметров может отсутствовать, то есть скобки могут быть пустыми, но в этом случае рекомендуется указывать тип void.
Тело_функции – часть определения функции, ограниченная фигурными скобками и непосредственно размещенная вслед за заголовком функции. Тело_функции может быть либо составным оператором, либо блоком. Например:
double f (int n, float x)
/*Тело функции*/
Определения функций не могут быть вложенными. Каждая функция, вызываемая в программе, должна быть один раз определена в одном из файлов проекта. Другие файлы, имеющие модули, вызывающие такую функцию, должны иметь ее прототип. Прототип специфицирует тип, имя и типы формальных параметров функции:
Тип имя_функции (спецификация_параметров);
В отличие от заголовка функции в прототипе функции имена формальных параметров могут не указываться. Например, следующие прототипы одной и той же функции эквивалентны:
double func (int n, float x);
double func (int, float);
Для обращения к функции используется выражение с операцией «круглые скобки»:
Операндами операции «круглые скобки» служат имя_функции и список_фактических_параметров, т.е. список выражений, количество которых равно числу формальных аргументов функции (за исключением функций с переменным количеством параметров). Между формальными и фактическими параметрами должно быть соответствие по типам, т.е. тип формального параметра должен соответствовать типу фактического параметра.
Фактические параметры могут быть любыми значениями того же типа, что и формальные параметры, массивом или указателем на любой тип или функцию. Все фактические параметры передаются по значению. Их значения копируются в соответствующие формальные параметры. Функция использует только копии объектов, не изменяя самих объектов. Компилятор выполняет преобразования по умолчанию для каждого типа формального параметра и каждого фактического аргумента.
Функция может не иметь фактических параметров и не возвращать никакого значения, например:
void Real_Time (void)
printf («n Текущее время : %s», __TIME__
» (час: мин: с) » );
При обращении к функции
Real_Time ( );
в результате выполнения функции будет выведено на экран сообщение:
Текущее время: 14:16:25 (час: мин: с)
Для оказания помощи программистам язык С предлагает готовые функции, организованные в виде библиотеки и распределенные на несколько групп. Каждая группа имеет свой заголовочный файл, подключаемый с помощью директивы include. В приложении 2 приведены некоторые часто употребляемые функции, объединенные в такие группы.
Категории
- Безопасность жизнедеятельности в техносфере (14)
- Бухгалтерский учет, анализ и аудит (5)
- Гуманитарные науки (56)
- Естественные науки (20)
- Информатика и вычислительная техника (27)
- Медицина (3)
- Менеджмент организации (20)
- Науки о человеке и обществе (2)
- Общетехнические дисциплины (18)
- Прикладная информатика в экономике (3)
- Программное обеспечение вычислительной техники и автоматизированных систем (2)
- Прочее (14)
- Социальная работа (26)
- Технология машиностроения (9)
- Финансы и кредит (25)
- Электротехника и промышленная электроника (3)
- Юриспруденция (28)
Свежие записи
- 8.13 Правоприменительная деятельность и средства массовой информации
- 8.12. Психологическая характеристика деятельности инспектора ГИБДД
- 8.11. Психологическая характеристика деятельности участкового инспектора
- 8.10. Психологическая характеристика деятельности инспектора ОБЭП
- 8.9. Психологическая характеристика деятельности инспектора таможни
Материал представлен на сайте исключительно в ознакомительных целях.
Все права принадлежат авторам этих материалов.
Источник: libraryno.ru
Исполнимый модуль
Исполни́мый (исполня́емый) мо́дуль (также исполнимый файл, англ. executable file ) — это разновидность файла, содержимое которого является готовым к непосредственному исполнению компьютерной программой.
Чаще всего он содержит двоичное представление машинных инструкций для определённого процессора (по этой причине на программистском сленге в отношении него используют слово бинарник — кальку с английского binary), но может содержать и инструкции на интерпретируемом языке программирования, для исполнения которых требуется интерпретатор. В отношении последних часто используется термин «скрипт».
Исполнением бинарных файлов занимаются аппаратно- и программно-реализованные машины. К первым относятся центральные процессоры, ко вторым — виртуальные машины, например, виртуальная машина Java. Формат бинарного файла определяется архитектурой исполняющей его машины. (Обзор форматов содержится в статье об объектных модулях.) Известны машины, реализованные как аппаратно, так и программно, например, процессоры семейства x86 и виртуальная машина VMWare.
Статус исполнимости файла чаще всего определяется принятыми соглашениями. Так, в одних операционных системах исполнимые файлы распознаются благодаря соглашению об именовании файлов (например, путем указания в имени расширения файла — «.exe» или «.bin»), тогда как в других исполнимые файлы обладают специфичными метаданными (например, битом разрешения «execute» в UNIX-подобных операционных системах).
В современных компьютерных архитектурах исполнимые файлы содержат большие объемы данных, не являющихся компьютерной программой: описание программного окружения, в котором программа может быть выполнена, данные для отладки программы, используемые константы, данные, которые могут потребоваться операционной системе для запуска процесса (например, рекомендуемый размер кучи), и даже описания структур окон графической подсистемы, используемых программой.
Зачастую исполнимые файлы содержат вызовы библиотечных функций, например, вызовы функций операционной системы. Таким образом, наряду с процессорозависимостью (машинозависимым является любой исполнимый файл) исполнимым файлам может быть свойственна зависимость от версии операционной системы и её компонент.
Источник: www.sbup.com
Модули. Структура модулей в Turbo Pascal
• Модульное программирование – это
метод разработки программ по частям.
• Модуль – это автономно
компилируемая программная единица,
включающая в себя различные
компоненты раздела описаний и
некоторые исполняемые операторы.
3. Модуль имеет следующую структуру:
UNIT < имя >;
INTERFACE
< интерфейсная часть >
IMPLEMENTATION
< исполняемая часть >
BEGIN
< инициирующая часть >
END.
5. Запомните!
• Имя модуля должно совпадать с
именем дискового файла, в который
помещается исходный текст модуля.
• Например: Модуль GLOBAL должен
быть сохранен под именем
GLOBAL.PAS
6.
• Имя модуля служит для связи с другими
модулями и программами. Эта связь
устанавливается специальным
предложением:
USES ;
• Например: USES Crt, Graph, Global;
7. Интерфейсная часть
• Интерфейсная часть открывается
зарезервированным словом
INTERFACE.
• В этой части модуля содержится
объявление всех глобальных объектов
модуля (типов, констант, переменных
и подпрограмм), которые должны стать
доступными основной программе и
другим модулям.
8.
• При объявлении глобальных
подпрограмм в интерфейсной части
указывается только их заголовок.
9. Пример
Unit Global;
Interface
uses crt;
const n=100;
type Vector=array [1..n] of integer;
procedure wwod (Razm: integer; Name:
char; var s: Vector);
procedure wywod (Razm: integer; Name:
char; h: Vector);
.
10.
• Если теперь в новой программе
написать предложение Uses Global, то
в программе станут доступными тип
Vector и процедуры wwod и wywod.
11. Исполняемая часть
• Начинается зарезервированным словом
IMPLEMENTATION и содержит
описания подпрограмм, объявленных в
интерфейсной части.
• В ней могут быть объявлены локальные
для модуля объекты.
12. Пример (продолжение)
Implementation
procedure wwod;
var i:integer;
Begin
clrscr;
Writeln ( ‘Введите элементы массива ‘ );
for i := 1 to Razm do
begin
write ( Name, ‘ [ ‘ , i , ‘ ]=‘ );
readln ( s[i] );
End;
end;
13.
procedure wywod;
var i:integer;
Begin
clrscr;
for i:=1 to Razm do
Writeln (Name, ‘ [ ‘ , i , ‘ ]= ‘, h [ i ] );
readln;
end;
.
14. Инициирующая часть
• Инициирующая часть завершает
модуль.
• Она может отсутствовать.
• Но обязательно в конце модуля должно
быть написано слово END и поставлена
точка.
15.
• Если инициирующая часть есть в
модуле, то начинается она с
зарезервированного слова BEGIN.
• После него размещаются исполняемые
операторы, содержащие некоторый
фрагмент программы.
• Эти операторы исполняются до
передачи управления основной
программе и обычно используются для
подготовки к ее работе.
16.
• Не рекомендуется делать
инициирующую часть пустой, лучше ее
опустить
17. Компиляция модулей
1. Сохранить программу в файле под именем
модуля
2. Выбрать в меню Компайл пункт Куда и
изменить его на значение Disk
3. Откомпилировать ее в одном из трех
режимов COMPILE (Alt+F9), MAKE (F9) или
BUILD (в меню Compile).
18. Пример 2
• Создать модуль, содержащий
подпрограммы для вычисления
математических функций – tg(x), ctg(x), ax
• Для создания используем
математические формулы:
tg(x)=sin(x)/cos(x)
ctg(x)=cos(x)/sin(x)
ax=e x · ln a
19.
Unit func1;
Interface
function tg (x: real) : real;
function ctg (x: real) : real;
function ax (a: real; x: real) : real;
Implementation
function tg;
begin
if cos(x)<>0 then tg:=sin(x)/cos(x)
else writeln (‘Значение tg не определено!’);
end;
20.
function ctg;
begin
if sin(x)<>0 then ctg:=cos(x)/sin(x) else
writeln (‘Значение сtg не определено!’);
end;
function ax;
begin
if a>0 then ax:=exp (x*ln(a)) else
if a=0 then ax:=0 else writeln(‘а — отрицательно’);
end;
end.
21. Использование созданного модуля
• Даны действительные x и y.Вычислить
значение выражения:
tg(x+y) – ctg(x-2y)
F = ————————-2x + 4y + xy + yx
22.
Program test;
Uses crt, func1;
Var x, y, f:real;
Begin
Clrscr;
Writeln (‘x=’);
Readln(x);
Writeln (‘y=’);
Readln(y);
23.
F:= (tg(x+y) – ctg(x-2*y)) / (ax(2, x) + ax(4, y) +
ax(x, y)+ ax(y, x)) ;
Writeln(‘F=’, f:15:3);
Readln
end.
24. Библиотеки подпрограмм
• Модули могут использоваться для
организации библиотеки подпрограмм.
• Часто возникает ситуация, когда один и тот
же алгоритм используется при решении
самых разных задач.
• В таких случаях желательно использовать
уже готовую подпрограмму как часть любой
другой программы.
25.
• Набор подпрограмм принято называть
библиотекой подпрограмм.
• Библиотеки подпрограмм делятся на
библиотеки статического вызова
(статические библиотеки)
библиотеки динамического вызова
(динамические библиотеки).
26.
• После компиляции
подпрограммы статической
библиотеки компоновщик добавляет ее
откомпилированный код к исполняемой
программе.
• Получившийся в результате исполнительный
модуль содержит код программы и всех
используемых подпрограмм.
27.
• В случае динамической компоновки
компоновщик просто использует
информацию о подпрограмме для
настройки соответствующих таблиц в
исполняемом файле.
• Когда исполняемый модуль загружается в
память, операционная система загружает
также все необходимые динамические
библиотеки и заполняет внутренние
таблицы программы адресами
библиотечных подпрограмм в памяти,
после чего программа запускается на
исполнение.
28.
Исходный код
Компилятор
Откомпилированный код (1)
Статическое связывание
Статическая
библиотека
(2)
Компоновщик
Исполняемый
модуль (1)
(2)
Динамическое связывание
Компоновщик
Исполняемый
модуль (1)
+
Внешнее
описание
Динамическ
ая
библиотека
(2)
Источник: ppt-online.org