Что такое модульное программирование. Минимизации количества необходимых вызовов. Методы разработки структуры программы

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

хорошую работу на сайт">

Пример: Духовка с встроенным радио и будильником. Хорошо продуманная система должна максимизировать сцепление и минимизировать сцепление. Несколько классов могут делиться одними и теми же характеристиками и иметь общие черты друг с другом, но также могут иметь определенные свойства, которые делают их разными. Объектно-ориентированные языки программирования позволяют классам наследовать часто используемые состояния и поведение других классов.

Эти иерархии состоят из родительских дочерних отношений между классами. Наследование используется для специализации родительского класса, но для создания дочернего класса. Преимущества объектно-ориентированного программирования. Модульность: исходный код для класса можно писать и поддерживать независимо от исходного кода для других классов. После создания объект может быть легко передан внутри системы.

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

Размещено на http://www.allbest.ru/

МИНОБРНАУКИ РОССИИ

Реферат

«Модульное программирование»

Введение

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

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

Легкая отладка: если конкретный объект оказывается проблемой, вы можете просто удалить его из своего приложения и подключить к нему другой объект. Это аналогично устранению механических проблем в реальном мире. Если болт ломается, вы заменяете его, а не всю машину.

Резюме объектно-ориентированных концепций. Вычисление выполняется объектами, обменивающимися друг с другом, запрашивая, чтобы другие объекты выполняли действия. Объекты общаются путем отправки и получения сообщений. Сообщение - это запрос на действие, связанный с любыми аргументами, необходимыми для выполнения задач.

Машинно-ориентированное программирование появилось одновременно с созданием электронных вычислительных машин. Сначала это были программы в машинных кодах, затем появился язык программирования Assembler (Автокод), который немного «очеловечил» написание программы в машинном коде.

Процедурное программирование. Основная идея этого стиля - алгоритмизация процесса решения задачи и выбор наилучшего алгоритма (по расходу памяти или по быстродействию.

Каждый объект имеет свою собственную память, состоящую из других объектов. Каждый объект является экземпляром класса. Класс просто представляет собой группировку похожих объектов, таких как целые числа или списки. Класс - это хранилище для поведения, связанного с объектом. То есть, все объекты, являющиеся экземплярами одного и того же класса, могут выполнять одни и те же действия.

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

Структурное программирование. Здесь основная идея прекрасно выражена Н. Виртом в его книге "Алгоритмы + структуры данных = программы". Это был ответ на кризис в области программирования, начавшийся в середине 60-х годив, когда объем исходного программного кода перешел рубеж в 1000 строк. В 1971 году появился алгоритмический язык Pascal и немного позже, в 1972 году, язык С..

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

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

Модульное программирование. Здесь основная идея заключалась в том, чтобы "спрятать" данные и процедуры внутри независимых программных единиц - модулей. Эту идею впервые реализовал Н. Вирт в алгоритмическом языке Modula (1975-1979 годы), а затем "подхватили" и остальные, распространенные в то время языки программирования. Например, известные системы программирования Turbo Pascal и Turbo С.

Переименуйте пространство имен при импорте

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

Объектно-ориентированное программирование. С середины 80-х годов объем исходного программного кода перешел рубеж в 100 000 строк. Нужно было сделать не случайное объединение данных и алгоритмов их обработки в единое целое, а - смысловое. То есть необходимо было создать модульное программирование нового уровня, когда основной акцент делается на смысловую связь структур данных и алгоритмов их обработки

Документация для собственных модулей

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

модуль программирование проектирование декомпозиция

1. Цель модульного программирования

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

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

Во всех императивных языках программирования программа понимается как линейная последовательность команд, которые компьютер выполняет в определенном порядке. Микрокод указывает на уровне процессора, как компьютер должен продолжать работу с данными. Они управляют состоянием областей хранения, которые предоставляют данные для обработки или вывода. Эти данные обычно хранятся в переменных, чтобы они могли изменяться в последовательности программ. Хронологическая последовательность задается в программе по порядку команд.

Приступая к разработке каждой программы, следует иметь в виду, что она, как правило, является большой системой, поэтому надо принять меры для ее упрощения. Для этого такую программу разрабатывают по частям, которые называются программными модулями. А сам такой метод разработки программ называют модульным программированием. Программный модуль - это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса. Это означает, что каждый программный модуль программируется, компилируется и отлаживается отдельно от других модулей программы, и тем самым, физически разделен с другими модулями программы. Более того, каждый разработанный программный модуль может включаться в состав разных программ, если выполнены условия его использования, декларированные в документации по этому модулю. Таким образом, программный модуль может рассматриваться и как средство борьбы со сложностью программ, и как средство борьбы с дублированием в программировании (т.е. как средство накопления и многократного использования программистских знаний).

Чтобы реализовать реагирующие программы, есть команды перехода, которые динамически изменяют некорректную последовательность команд. В соответствии с императивной парадигмой дается решение: какие отдельные шаги должны выполняться один за другим, как изменить переменные, чтобы конечный результат был достигнут. Итак, вопрос: «Как?».

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

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

Генерирующее программирование, аспектно - ориентированное и объектно - ориентированное программирование основано на структурированном. Объектно-ориентированное программирование сегодня является наиболее широко используемым принципом. Однако ориентация объекта очень строго соблюдается на отдельных языках программирования.

Парадигмы декларативного программирования

Декларативное программирование - идея молодой истории программирования. Вопреки императивным парадигмам программирования декларативное программирование не запрашивает «как», а «что» рассчитывается. Путь решения не запрограммирован, а результат должен быть достигнут. Поэтому декларативные парадигмы основаны на компьютерно-независимых математических теориях.

2. Основные характеристики программного модуля

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

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

  • Потому что декларативное программирование является ссылочно прозрачным.
  • Это также относится к декларативному программированию.
Несмотря на эти преимущества, декларативные языки программирования широко не используются.

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

Их принятие страдает под условием «Академический язык». Это не десятки тысяч больших городов. В контексте каждого языка программирования Гражданин первого класса является единицей, которая может использоваться непосредственно по сравнению с другими единицами без ограничений.

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

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

Информационно прочный модуль - это модуль, выполняющий (реализующий) несколько операций (функций) над одной и той же структурой данных (информационным объектом), которая считается неизвестной вне этого модуля. Для каждой из этих операций в таком модуле имеется свой вход со своей формой обращения к нему. Такой класс следует рассматривать как класс программных модулей с высшей степенью прочности. Информационно прочный модуль может реализовывать, например, абстрактный тип данных.

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

Но сначала мы задаем вопрос: «Есть ли что-то вроде объектно-ориентированной архитектуры?». Термин «архитектура программного обеспечения» может быть основой для целых семинаров. Вы не найдете единообразного определения в литературе. Поэтому мы пытаемся описать концепцию архитектуры с помощью свойств, которые часто отнесены к архитектурам программного обеспечения.

Сцепление модуля - это мера его зависимости по данным от других модулей. Характеризуется способом передачи данных. Чем слабее сцепление модуля с другими модулями, тем сильнее его независимость от других модулей. Для оценки степени сцепления Майерс предлагает упорядоченный набор из шести видов сцепления модулей. Худшим видом сцепления модулей является сцепление по содержимому . Таким является сцепление двух модулей, когда один из них имеет прямые ссылки на содержимое другого модуля (например, на константу, содержащуюся в другом модуле). Такое сцепление модулей недопустимо. Не рекомендуется использовать также сцепление по общей области - это такое сцепление модулей, когда несколько модулей используют одну и ту же область памяти. Единственным видом сцепления модулей, который рекомендуется для использования современной технологией программирования, является параметрическое сцепление (сцепление по данным по Майерсу) - это случай, когда данные передаются модулю либо при обращении к нему как значения его параметров, либо как результат его обращения к другому модулю для вычисления некоторой функции. Такой вид сцепления модулей реализуется на языках программирования при использовании обращений к процедурам (функциям).

Архитектура также является тем, что мы сначала думаем о ком-то, кто ничего не знает о нашей системе, чтобы он мог получить обзор системы. Архитектура влияет на разработчиков системы, потому что она делает предубеждения о том, как некоторые вещи должны быть реализованы. Ориентация объектов не является главным образом методом архитектурного проектирования. Поэтому мы обычно говорим об объектно-ориентированном проектировании системы, а не о объектно-ориентированной архитектуре.

Обсуждение: трудно ли изменить архитектуры? Бернхард: Можете ли вы привести пример? По моему опыту, архитектуры меняются только с большим усилием. На практике один из них полностью отбрасывает архитектуру, а затем занимает новую архитектуру. В результате мы смогли конвертировать нашу архитектуру для определенных сценариев просто в чистую архитектуру клиент-сервер, в которой полная логика, включая доступ к данным, переносится на клиента. Мы смогли преобразовать нашу архитектуру от тонкого клиента к жирному клиенту.

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

o всегда следует использовать рутинный модуль, если это не приводит к плохим (не рекомендуемым) сцеплениям модулей;

o зависящие от предыстории модули следует использовать только в случае, когда это необходимо для обеспечения параметрического сцепления;

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

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

3. Проектирование модуля

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

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

3. 1 Функциональная декомпозиция

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

В настоящее время в области программирования на языках высокого уровня чаще всего принимаются такие решения, которые представляют собой наилучший способ по использованию сегментации программ. Часто обнаруживается, что некоторые модули связываются с помощью одного набора критериев, а другие модули - с помощью другого. Каждый модуль должен включать легко понимаемые программные секции.

3.2 Минимизации количества передаваемых параметров

Иногда обнаруживается, что после определения модулей программы создано нечто громоздкое и неуклюжее. Это часто случается тогда, когда модули при выполнении возложенных на них задач требуют доступа к обширному количеству данных. Чаще всего это легко может произойти, если на модуль возложено выполнение нескольких опций. Чтобы знать состояние программы в данное время, модуль должен принимать очень много различных переменных. Если это так, и выявлено, что модуль принимает большое количество параметров, необходимо ответить на следующие две группы вопросов:

o В этом модуле предпринята попытка выполнения нескольких функций? Требует ли модуль параметры, используемые в не относящихся к данному модулю секциях? Если ответы на эти вопросы положительные, то необходимо снова обратиться к дальнейшей сегментации этого модуля.

o Модуль представляет собой функциональный разрез? Являются ли на самом деле вызывающий и вызываемый модули частью одной и той же функции? Если это так, то поместите их вместе в один модуль, даже если результирующий модуль окажется слишком большим. Затем попробуйте выполнить сегментацию модуля снова различными способами.

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

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

3.3 Минимизации количества необходимых вызовов

Одним из существенных преимуществ модульного программирования является то, что программа основного уровня очень часто может быть сконструирована для чтения как последовательность вызываемых процедур. Этот факт существенно повышает «понимаемость» программы, поскольку читатель может познакомиться с ее основным потоком и функционированием после прочтения только одной - двух страниц программного кода. Однако эта особенность может также иметь и недостатки. Одна из многих верхних статистических оценок программирования говорит о том, что 90% времени выполнения типовых программ расходуется в 10 % кода программы. При этом подразумевается, что если эти 10 % содержат большое количество цепочечных вызовов процедур, то суммарное время, затрачиваемое на управление выполнением программы, может стать непреодолимым препятствием на пути использования этого подхода.

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

Заключение

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

Модуль - это автономно компилируемая коллекция программных ресурсов, предназначенная для использования другими модулями и программами.

Все ресурсы модуля делятся на две группы: внешние - предназначенные для использования другими программными единицами, и внутренние - рабочие ресурсы данного модуля.

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

Размещено на Allbest.ru

Подобные документы

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

    реферат , добавлен 29.01.2016

    Характеристика модульного программирования: процедуры и функции, модули и их структура, открытые массивы и строки, нетипизированные параметры. Способы передачи параметров в подпрограммы в Borland Pascal. Объектно-ориентированное программирование.

    контрольная работа , добавлен 28.04.2009

    Сущность программирования с использованием среды Delphi 7 и ее основные графические возможности. Структура автономно компилируемого программного модуля и его принципы. Основные приемы работы с графическими процедурами, построение дуги, круга и эллипса.

    курсовая работа , добавлен 16.12.2011

    Появление первых вычислительных машин и возникновение "стихийного" программирования. Структурный подход к декомпозиции сложных систем. Развитие модульного и объектно-ориентированного программирования. Особенности компонентного подхода и CASE-технологий.

    презентация , добавлен 14.10.2013

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

    презентация , добавлен 05.11.2016

    Предмет исследования – современные методы разработки программ таких, как объектно-ориентированное программирование и визуальное проектирование, а также структурное и модульное программирование. C++ - универсальный язык программирования. Ключевые понятия.

    курсовая работа , добавлен 10.01.2009

    Почему C++. Возникновение и эволюция языка C++. Сравнение языков С++ и С. Эффективность и структура. Процедурное программирование. Модульное программирование. Абстракция данных. Объектно-ориентированное программирование. Улучшенный С.

    реферат , добавлен 03.06.2004

    Обзор технологий и систем геоинформационных систем. Системное и функциональное проектирование программного модуля, его разработка с использованием сред программирования Visual C++ 6.0, Qt 3.3.3. Технико-экономическое обоснование данного процесса.

    дипломная работа , добавлен 13.03.2011

    Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.

    отчет по практике , добавлен 21.04.2012

    Проектирование информационной системы. Анализ языков программирования и существующих решений для администрирования системы управления базами данных. Разработка модуля взаимодействия и структуры программы. Модули авторизации и соединения с базой данных.

Назначение модулей

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

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

Основным принципом модульного программирования является принцип «разделяй и властвуй». Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам.

Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

Термин «модуль» в программировании начал использоваться в связи с внедрением модульных принципов при создании программ. В 70-х годах под модулем понимали какую-либо процедуру или функцию, написанную в соответствии с определенными правилами. Например: «Модуль должен быть простым, замкнутым (независимым), обозримым (от 50 до 100 строк), реализующим только одну функцию задачи, имеющим одну входную и одну выходную точку ».

Первым основные свойства программного модуля более-менее четко сформулировал Парнас (Parnas): «Для написания одного модуля должно быть достаточно минимальных знаний о тексте другого ». Таким образом, в соответствии с определением, модулем могла быть любая отдельная процедура (функция) как самого нижнего уровня иерархии (уровня реализации), так и самого верхнего уровня, на котором происходят только вызовы других процедур-модулей.

Таким образом, Парнас первым выдвинул концепцию скрытия информации (information hiding) в программировании. Однако существовавшие в языках 70-х годов только такие синтаксические конструкции, как процедура и функция, не могли обеспечить надежного скрытия информации, поскольку подвержены влиянию глобальных переменных, поведение которых в сложных программах бывает трудно предсказуемым.

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

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

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

Впервые специализированная синтаксическая конструкция модуля была предложена Н. Виртом в 1975 г. и включена в его новый язык Modula. Насколько сильно изменяются свойства языка, при введении механизма модулей, свидетельствует следующее замечание Н.Вирта, сделанное им по поводу более позднего языка Модула-2: «Модули – самая важная черта, отличающая язык Модула-2 от его предшественника Паскаля».

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

Рис.2. Последовательность разработки программного проекта

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

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

Структура модулей

Всякий модуль имеет следующую структуру:

Unit <имя_модуля>;

Статьи по теме: