Читайте также:
|
|
Понятие модуля. Принципы модульного программирования. Понятие объекта как динамического модуля.
Основные понятия в универсальных технологиях программирования:
1. тип данных – определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций.
Константа
Переменная
Модуль
Процедура
Процедурная переменная
Simula – 1й ООП-язык.
Понятие модуля
Модуль – функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом, предназначенный для использования в других программах. Модули позволяют разбивать сложные задачи на более мелкие.
Модуль – понятие многозначное. Возможны следующие определения: 1) библиотека процедур, которая может подключать другие модули и использоваться другими модулями; 2) файл на диске; 3) единица компиляции; 4) единица разработки.
Основные требования расширяемого программирования относительно модулей: созданный и отлаженный модуль уже не изменяется.
Модульное программирования
Модульное программирование – это организация программы как совокупности небольших независимых блоков (модулей), структура и поведение которых подчиняются определенным правилам.
Основные концепции модульного программирования:
-каждый модуль имеет единственную точку входа и выхода;
-размер модуля по возможности должен быть минимизирован;
-вся система построена из модулей;
-каждый модуль не зависит от того, как реализованы другие модули.
Основной принцип модульного программирования – «разделяй и властвуй».
Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.
Термин «модуль» в программировании начал использоваться в связи с внедрением модульных принципов при создании программ. В 70-х годах под модулем понимали какую-либо процедуру или функцию, написанную в соответствии с определенными правилами. Например: «Модуль должен быть простым, замкнутым (независимым), обозримым (от 50 до 100 строк), реализующим только одну функцию задачи, имеющим одну входную и одну выходную точку».
Первым основные свойства программного модуля более-менее четко сформулировал Парнас: «Для написания одного модуля должно быть достаточно минимальных знаний о тексте другого». Таким образом, Парнас первым выдвинул концепцию скрытия информации (information hiding) в программировании. Однако существовавшие в языках 70-х годов только такие синтаксические конструкции, как процедура и функция, не могли обеспечить надежного скрытия информации, поскольку подвержены влиянию глобальных переменных, поведение которых в сложных программах бывает трудно предсказуемым. Решить эту проблему можно было только разработав новую синтаксическую конструкцию, которая не подвержена влиянию глобальных переменных. Такая конструкция была создана и названа модулем.
Количество модулей в комплексе должно определяться декомпозицией поставленной задачи на независимые подзадачи. В предельном случае модуль может использоваться даже для заключения в него всего лишь одной процедуры, если необходимо, чтобы выполняемое ею локальное действие было гарантировано независимым от влияния других частей программы при любых изменениях.
Впервые специализированная синтаксическая конструкция модуля была предложена Н. Виртом в 1975 г. и включена в его новый язык Modula. Насколько сильно изменяются свойства языка при введении механизма модулей, свидетельствует следующее замечание Н.Вирта, сделанное им по поводу более позднего языка Модула-2: «Модули – самая важная черта, отличающая язык Модула-2 от его предшественника Паскаля».
По своей организации и характеру использования в программе модули Паскаля близки к модулям-пакетам (PACKAGE) языка программирования Ада. В них так же, как и в пакетах Ады, явным образом выделяется некоторая «видимая» интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант, переменных, а также приводятся заголовки процедур и функций. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.
Общая структура программного модуля Delphi:
Заголовок модуля unit<имя модуля>;
Директивы компилятора {$<директивы>}
Интерфейсная часть interface
Подключение модулей uses<имя>,..., <имя>;
Константы const...;
Типы данных type...;
Переменные var...;
Заголовки процедур procedure<имя> (<параметры>);
Заголовки функций function<имя> (<параметры>): <тип>;
Часть реализации implementation
Подключение модулей uses<имя>,..., <имя>;
Константы const...;
Типы данных type...;
Переменные var...;
Реализация процедур procedure<имя>; begin... end;
Реализация функций function<имя>; begin... end;
Код инициализации initialization<операторы>
Код завершения finalization<операторы>
end.
После слова unit записывается имя модуля. Оно должно совпадать с именем файла, в котором находится исходный текст модуля. Заголовок модуля формируется автоматически при сохранении файла на диске, поэтому его не следует изменять вручную. Чтобы дать модулю другой заголовок, просто сохраните его на диске под другим именем.
Interface – глобальные данные, процедуры и функции, доступные для использования в основной программе и других модулях.
Implementation – программный код глобальных процедур и функций и описываются локальные данные, процедуры и функции, недоступные основной программе и другим модулям.
Блок initialization является необязательным. Он состоит из операторов и выполняется автоматически непосредственно перед запуском основной программы. Блоки инициализации подключенных к программе модулей выполняются в том порядке, в котором они упоминаются в секции uses.
Блок finalization тоже является необязательным. Он состоит из операторов и выполняется автоматически непосредственно после завершения основной программы. Блоки завершения подключенных к программе модулей выполняются в порядке, обратном порядку подключения модулей в секции uses.
Все стандартные модули Delphi можно разбить на две группы: системные модули и модули визуальных компонентов.
К системным модулям относятся System, SysUtils, ShareMem, Math. В них содержатся наиболее часто используемые в программах типы данных, константы, переменные, процедуры и функции. Модуль System — это сердце среды Delphi; содержащиеся в нем подпрограммы обеспечивают работу всех остальных модулей системы. Модуль System подсоединяется автоматически к каждой программе и его не надо указывать в операторе uses.
Модули визуальных компонентов (VCL — Visual Component Library) используются для визуальной разработки полнофункциональных GUI-приложений. Эти модули – высокоуровневая объектно-ориентированная библиотека со всевозможными элементами пользовательского интерфейса: кнопками, надписями, меню, панелями и т.д. + средства доступа к базам данных. Данные модули подключаются автоматически при помещении компонентов на форму.
Программисту предоставляется возможность подключать к программе или модулю отдельно скомпилированные процедуры и функции, написанные на языке ассемблера или C. Для этого используется директива компилятора $LINK и зарезервированное слово external. Директива {$LINK <имя файла>} указывает подключаемый объектный модуль, а external сообщает компилятору, что подпрограмма внешняя.
Предположим, что на ассемблере написаны и скомпилированы функции Min и Max, их объектный код находится в файле MINMAX.OBJ. Подключение функций Min и Max к программе на языке Delphi будет выглядеть так:
function Min(X, Y: Integer): Integer; external;
function Max(X, Y: Integer): Integer; external;
{$LINK MINMAX.OBJ}
В модулях внешние подпрограммы подключаются в разделе implementation.
Дата добавления: 2015-11-16; просмотров: 77 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Перегрузка бинарных операторов. Перегрузка унарных операторов. Перегрузка операторов преобразования типа. | | | Понятие класса |