Модуль в программировании. Модульное программирование — ПИЭ.Wiki

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

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

К модулю предъявляются следующие требования:

1) модуль должен реализовывать единственную функцию, т.е. при построении модуля используется концепция: «один модуль – одна функция». Таким образом, модуль – это элемент программы, выполняющий самостоятельную задачу. На его входе он может получать определенный набор исходных данных, обрабатывать их в соответствии с заданным алгоритмом и возвращать результат обработки, т.е. реализуется стандартный принцип IPO (Input – Process – Output) – вход-процесс-выход;

2) на модуль нужно ссылаться с помощью его имени. Он должен иметь один вход и один выход, что гарантирует замкнутость модуля и упрощает сопровождение программ;

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

4) модуль должен возвращать управление в точку его вызова, в свою очередь, он должен иметь возможность сам вызывать другие модули;

5) модуль не должен сохранять историю своих вызовов и использовать ее при своем функционировании;

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

7) модуль должен иметь слабые информационные связи с другими программными модулями – обмен информацией между модулями должен быть по возможности минимизирован;

8) модуль должен быть сравнительно невелик, т.е. быть обозримым по размеру и сложности. Опытные программисты рекомендуют его размер не более двух страниц распечатки на принтере.

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

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

Достоинствами модульного программирования является следующее:

· большую программу могут писать одновременно несколько программистов, что позволяет раньше закончить задачу;

· можно создавать библиотеки наиболее употребительных модулей;

· упрощается процедура загрузки в оперативную память большой программы, требующей сегментации;

· появляется много естественных контрольных точек для отладки проекта;

· проще проектировать и в дальнейшем модифицировать программы.

Недостатки модульного программирования заключаеются в следующем:

· возрастает размер требуемой оперативной памяти;

· увеличивается время компиляции и загрузки;

· увеличивается время выполнения программы;

· довольно сложными становятся межмодульные интерфейсы.

Модульное программирование реализуется через модули – функции. Функция – это область памяти, выделяемая для сохранения программного кода, предназначенного для выполнения конкретной задачи. Другими словами, функция – минимальный исполняемый модуль программы на языке С/С++. По умолчанию функция имеет тип external, и доступ к ней возможен из любого файла программы. Но она может быть ограничена спецификатором класса памяти static.

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

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

Тип имя_функции (спецификация_параметров) тело_функции

Тип – это тип возвращаемого функцией значения, в том числе void (кроме типов массива или функции). Умолчанием является тип int. Если тип возврата функции не void, то тело функции должно содержать как минимум один оператор return.

Имя_функции – идентификатор, с помощью которого можно обратиться к функции. Он выбирается программистом произвольно и не должен совпадать со служебными словами и с именами других объектов программы. Однако любая программа на языке С/С++ должна иметь хотя бы одну функцию с именем main – главную функцию, содержащую точку входа в программу.

Спецификация_параметров – список формальных параметров, т.е. переменных, принимающих значения, передаваемые функции при ее вызове. Список формальных параметров перечисляется через запятую. Каждый формальный параметр должен иметь следующий формат:

Читать еще:  Определение мифа. Зачет теория литературы

Тип может быть встроенным (int, long, float, double и т.д.), структурой (struct), объединением (union), перечислением (enum), указателями на них или на функции или классы (class). Имя_формального_параметра представляет собой имя используемой в теле функции переменной. Идентификаторы формальных параметров не могут совпадать с именами локальных переменных, объявленных внутри тела функции.

Объявление формального параметра может содержать инициализатор, то есть выражение, которое должно обеспечить параметру присвоение начального значения. Инициализатор параметра не является константным выражением. Начальная инициализация параметров происходит не на стадии компиляции (как, например, выделение памяти под массивы), а непосредственно в ходе выполнения программы.

В языке С/C++ допустимы функции, количество параметров у которых при компиляции функции не фиксировано, следовательно, остаются неизвестными и их типы. Количество и типы параметров таких функций становятся известными только при их вызове, когда явно задан список фактических параметров. При определении и описании таких функций со списками параметров неопределенной длины спецификацию формальных параметров следует закончить запятой и многоточием.

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

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

Тело_функции – часть определения функции, ограниченная фигурными скобками и непосредственно размещенная вслед за заголовком функции. Тело_функцииможет быть либо составным оператором, либо блоком. Например:

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

Материал из ПИЭ.Wiki

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

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

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

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

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

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

Все модули используют мнемонические имена для определяемых ими объектов (констант, переменных, типов и подпрограмм), что облегчает понимание их назначения и запоминание, удовлетворяет требованию наглядности текста программ.

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

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

Модули служат также целям создания проблемно-ориентированного контекста и локализации машинной зависимости.

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

Концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:

  • Функциональная декомпозиция задачи — разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач — модулей. Модули связаны между собой только по входным и выходным данным.
  • Модуль — основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
  • Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока действительно не удастся добиться ясного понимания назначения всех модулей задачи и их оптимального сочетания.
  • Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Читать еще:  Как правильно просить прощения. Учимся правильно просить прощения

Модульное программирование — Modular programming

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

Интерфейс модуля выражает элементы, которые предусмотрены и требуемые модуль. Элементы , определенные в интерфейсе могут быть обнаружены другими модулями. Реализация содержит рабочий код , который соответствует элементам , объявленных в интерфейсе. Модульное программирование тесно связано с структурного программирования и объектно-ориентированного программирования , все с той же целью содействия строительству крупных программ и систем путем разложения на более мелкие куски, и все происходящие вокруг 1960 — х годов. В то время как историческое использование этих терминов противоречиво, «модульное программирование» относится теперь к разложению высокого уровня кода целой программы на часть: Структурное программирование для использования коды низкоуровневой структурированного потока управления , а также объектно-ориентированный программирование на данных использования объектов , своего рода структуры данных .

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

содержание

терминология

Термин сборки (как в .NET языках , как C # , F # или Visual Basic .NET ) или пакет (как в Dart , Go или Java ) иногда используется вместо модуля . В других реализациях, это понятие принципиально отличается; в Python пакет представляет собой набор модулей, в то время как в Java- введение новой концепции модуля (сборник пакетов с улучшенным контролем доступа) планируются.

Кроме того, термин «пакет» имеет другое применение в программном обеспечении (например , пакеты .NET NuGet ). Компонент представляет собой аналогичную концепцию, но , как правило , относится к более высокому уровню; компонент является частью целой системы , в то время как модуль является частью индивидуальной программы. Масштаб термина «модуль» существенно различается между языками; в Python очень мелкосерийное и каждый файл представляет собой модуль, в то время как в Java 9 планируется быть крупномасштабными, где модуль представляет собой набор пакетов, которые в свою очередь , коллекции файлов.

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

Языковая поддержка

Заметные примеры языков , которые не имеют поддержки модулей C , C ++ и Pascal (в его исходной форме). По состоянию на 2014 год , модули были предложены для C ++; модули были добавлены в Objective-C в IOS , 7 (2013 г. ); и Паскаль был заменен Modula и Oberon, который включал модули с самого начала, а также различные производные , которые включены модули. JavaScript была родных модулей так ECMAScript 2015.

Модульное программирование может выполняться , даже если язык программирования не хватает явных синтаксических функций для поддержки названных модулей, как, например, в С. Это делается за счет использования существующих возможностей языка, а также , например, кодирование конвенций , программирования идиомы и физические структура кода. IBM System я также использует модули при программировании в Integrated Language Environment (ILE).

Ключевые аспекты

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

Читать еще:  Рахат-лукум – визитная карточка Турции. Рахат-лукум в домашних условиях

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

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

история

Модульное программирование в виде подсистем ( в частности , для I / O) библиотек программного обеспечения и, относится к ранним системам программного обеспечения, где она была использована для повторного использования кода . Модульное программирование сами по себе, с целью модульности, разработанной в конце 1960 — х и 1970 — х года, как более масштабного аналог концепции структурного программирования (1960). Термин «модульное программирование» относится , по крайней мере национальный симпозиум по модульному программированию, организованном в информации и систем Институте в июле 1968 года Ларри Константином ; другие ключевые понятия были скрытие информации (1972) и разделение интересов (SoC, 1974).

Модули , не были включены в оригинальной спецификации для Алгола 68 (1968), но были включены в качестве расширений в ранних реализациях, Алгол 68-R (1970) и Алгол 68C (1970), а позднее формализованы. Одним из первых языков , разработанных с самого начала для модульного программирования был недолгим Modula (1975), по Никлаус Вирт . Другой ранний модульный язык был Mesa (1970 — е годы), по Xerox PARC , и Вирт опиралась на Mesa, а также оригинальной Modula в его преемника, Modula-2 (1978), что повлияло на более поздние языки, в частности , через его преемника, Modula-3 ( 1980 — е годы). Использование Modula по dot- уточненных имен , любят M.a ссылаться на объект a из модуля M совпадает с обозначениями , чтобы получить доступ к области записи (и аналогично для атрибутов или методов объектов), и в настоящее время широко распространены, видели в C #, Dart, Go, Java и Python, среди других. Модульное программирование стало широко распространенным из 1980 — х годов: оригинальный Pascal язык (1970) , не включают в себя модули, но более поздние версии, в частности , UCSD Pascal (1978) и Turbo Pascal (1983) включил их в виде «единиц», как это сделал Паскаль -influenced Ада (1980). Extended Pascal ISO 10206: 1990 стандарт хранится ближе к Модуле-2 в своей модульной поддержке. Standard ML (1984) имеет один из самых полных модульных систем, в том числе функторов (параметризованных модулей) для сопоставления между модулями.

В 1980 — х и 1990 — х годах, модульного программирования был омрачен и часто сплавлены с объектно-ориентированного программирования , в частности , из — за популярности C ++ и Java. Например, семейство C языков была поддержка объектов и классов в C ++ (первоначально C с классами , 1980) и Objective-C (1983), которые поддерживают только модули 30 лет или более поздними. Java (1995) поддерживает модули в виде пакетов, хотя основной единицей организации кода является классом. Тем не менее, в Python (1991) заметно использовал как модули и объекты с самого начала, используя модули в качестве основного блока организации коды и «пакеты» в качестве более масштабного блока; и Perl , 5 (1994) включает в себя поддержку для обоих модулей и объектов, с широким набором модулей будут доступны из CPAN (1993).

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

Источники:

http://studopedia.ru/9_6296_modulnoe-programmirovanie.html

http://wiki.mvtom.ru/index.php/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

http://ru.qwe.wiki/wiki/Modular_programming

Ссылка на основную публикацию
Статьи на тему:

Adblock
detector