модуль

Модуль

Модуль (англ. module, не путать с математическим оператором модуля - modulo) - структурная единица исходного кода программы, обычно оформляемая в виде отдельного файла. В некоторых языках, например Pascal, называется юнитом (unit). Модуль является контейнером для символов языка (функций, типов, глобальных переменных, псевдонимов, шаблонов, констант и пр.), имеет таблицу символов и собственное пространство имен.

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

Операция обращения одного модуля к другому называется импортом (import) или использованием (use) модуля. Фактически импорт является указанием семантическому анализатору, в каком файле следует искать символ, отсутствующий в текущем файле. Поскольку модуль однозначно сопоставлен файлу, парсинг кода в файле осуществляется только один раз, и получившаяся таблица символов модуля используется семантическим анализатором для разрешения имен. Это решает проблему циклической зависимости, когда два файла обращаются друг к другу.

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

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

Изначально модульными являются языки семейства Pascal (включая Object Pascal, Modula-2, Oberon и др.), Perl и испытвашие его влияние Python и Ruby, а также функциональные языки (Haskell, ML, Erlang) и некоторые C-подобные языки (Java, C#, D). C и его надмножества (C++, Objective C), PHP и большинство вариантов BASIC не поддерживают модульность, в них вместо импорта модуля используется включение одного файла в другой (директива include), что позволяет повторно использовать один и тот же код.

  • модуль.txt
  • Последнее изменение: 2021/03/15 09:24
  • (внешнее изменение)