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


Мо́дульное программи́рование — организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определённым правилам[1].

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

Модуль — последовательность логически связанных фрагментов, оформленных как отдельная часть программы[2]. Во многих языках оформляется в виде отдельного файла с исходным кодом или поименованной непрерывной её части, что обеспечивает раздельную компиляцию модулей[3]. При построении модуля используется концепция: «один модуль — одна функция», то есть модуль — элемент программы, решающий одну самостоятельную задачу. Некоторые языки предусматривают объединение модулей в пакеты[4].

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

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

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