~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 48432AF6869BE7EBFE56C1698516A73D__1710923580 ✰
Заголовок документа оригинал.:
✰ Modular programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Модульное программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Modular_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/48/3d/48432af6869be7ebfe56c1698516a73d.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/48/3d/48432af6869be7ebfe56c1698516a73d__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:11:35 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 20 March 2024, at 11:33 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Модульное программирование — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии

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

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

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

История [ править ]

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

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

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

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

Терминология [ править ]

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

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

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

Языковая поддержка [ править ]

Языки, формально поддерживающие концепцию модуля, включают Ada , ALGOL , BlitzMax , C++ , C# , Clojure , COBOL , Common Lisp , D , Dart , eC , Erlang , Elixir , Elm , F , F# , Fortran , Go , Haskell , IBM/360. Ассемблер , Язык управления (CL), IBM RPG , Java , [а] Julia , MATLAB , ML , Modula , Modula-2 , Modula-3 , Morpho, NEWP , Oberon , Oberon-2 , Objective-C , OCaml , несколько производных от Паскаля ( Component Pascal , Object Pascal , Turbo Pascal , UCSD Pascal ), Perl , PHP , PL/I , PureBasic , Python , R , Ruby , [4] Ржавчина , JavaScript , [5] Visual Basic (.NET) и WebDNA .

Яркими примерами языков, в которых отсутствует поддержка модулей, являются C , а также C++ и Pascal в их исходной форме. Однако C и C++ позволяют указывать отдельные компиляционные и декларативные интерфейсы с использованием файлов заголовков . Модули были добавлены в Objective-C в iOS 7 (2013 г.); на C++ с помощью C++20 , [6] и на смену Паскалю пришли Modula и Oberon , которые с самого начала включали модули, а также различные производные, включавшие модули. В JavaScript есть собственные модули начиная с ECMAScript 2015.

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

Ключевые аспекты [ править ]

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

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

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

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

См. также [ править ]

Примечания [ править ]

  1. ^ Термин «пакет» используется для аналога модулей в JLS; [3] — см. пакет Java . « Модули », своего рода набор пакетов, запланированы для Java 9 как часть Project Jigsaw ; ранее они назывались «суперпакетами» и планировались для Java 7.

Ссылки [ править ]

  1. ^ Линдси, Чарльз Х. (февраль 1976 г.). «Предложение по созданию модулей в АЛГОЛе 68» (PDF) . Бюллетень Алгола (39): 20–29. Архивировано из оригинала (PDF) 03 марта 2016 г. Проверено 1 декабря 2014 г.
  2. ^ Дэвид МакКуин (август 1984 г.). «Модули для стандартного ML, LFP '84. Материалы симпозиума ACM 1984 года по LISP и функциональному программированию»: 198–207. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  3. ^ Джеймс Гослинг, Билл Джой, Гай Стил, Гилад Брача, Спецификация языка Java, третье издание , ISBN   0-321-24678-0 , 2005 г. Во введении говорится: «Глава 7 описывает структуру программы, которая организована в пакеты, аналогичные модулям Modula». Слово «модуль» не имеет особого значения в Java.
  4. ^ «Класс: Модуль (Ruby 2.0.0)» .
  5. ^ Спецификация языка ECMAScript® 2015, модули 15.2.
  6. ^ «N4720: Рабочий проект, расширения C++ для модулей» (PDF) .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 48432AF6869BE7EBFE56C1698516A73D__1710923580
URL1:https://en.wikipedia.org/wiki/Modular_programming
Заголовок, (Title) документа по адресу, URL1:
Modular programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)