Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
екзамен Алгортми і стр даних.docx
Скачиваний:
2
Добавлен:
19.09.2019
Размер:
88.29 Кб
Скачать

13. Організація міжмодульних зв"язків за управлінням.

14. Особливості угод про зв"язки за управлінням. Сцепление по управлению – один модуль управляет функционированием другого. При этом в вызываемый модуль передается значение управляющей переменной.

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

Function MinMax(a,b: integer; flag:boolean): integer;

Begin

If (a>b) and (flag) then MinMax:=a

Else MinMax:=b;

End;

Здесь вызывающий модуль передает в вызываемый некоторый информационный объект (флаг), предназначенный для управления внутренней логикой модуля. Таким способом часто выполняют настройку режимов работы ПО. Подобные настройки снижают наглядность взаимодействия модулей.

15. Особливості угод про зв"язки в мові С/C++.

Заголовочный файл (иногда головной файл, англ. header file), или подключаемый файл — в языках программирования файл, механически «вставляемый» компилятором в исходный текст в том месте, где располагается некоторая директива ({$I file.inc} в Паскале,#include <file.h> в Си).

В языках программирования Си и C++, с их зачаточной модульностью, заголовочные файлы — основной способ подключить к программе типы данных, структуры, прототипы функций, перечислимые типы, и макросы, используемые в другом модуле. Имеет по умолчаниюрасширение .h; иногда для заголовочных файлов языка C++ используют расширение .hpp. Чтобы избежать повторного включения одного и того же кода, используются директивы #ifndef, #define, #endif. Заголовочный файл в общем случае может содержать любые конструкции языка программирования, но на практике исполняемый код (за исключением inline-функций в C++) в заголовочные файлы не помещают. Например, идентификаторы, которые должны быть объявлены более чем в одном файле, удобно описать в заголовочном файле, а затем его подключать по мере надобности. Подобным же образом работает модульность и в большинстве ассемблеров.

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

В современных языках программирования программы составляются из модулей, компилируемых по отдельности. В связи с этим возникает вопрос: как указать, что подпрограмма или переменная X определена в модуле Y? Для этого существует несколько решений, в Сиприменено такое.

В одной из единиц компиляции (то есть с-файле) описывается функция, например:

int add(int a, int b)

{

return a + b;

}

Чтобы на неё можно было ссылаться из других единиц компиляции, требуется объявить её при помощи прототипа функции, то есть:

int add(int, int);

int triple(int x)

{

return add(x, add(x, x));

}

Тем не менее, такое объявление требует, чтобы программист обеспечил объявление функции для add в двух местах — в файле, содержащем её выполнение, и в файле, в котором она используется. В случае изменения определения функции программист должен не забыть обновить все прототипы, использованные в программе.

Заголовочный файл является одним из решений этой проблемы. В заголовочном файле модуля объявляется каждая функция, объект и тип данных, являющиеся частью интерфейса вызова модуля — например, в этом случае заголовочный файл может содержать только объявление функции add. Каждый исходный файл, ссылающийся на функцию add, должен использовать директиву #include для подключения заголовочного файла:

/* File triple.c */

#include "add.h"