Какая разница между функцией и модулем? - PullRequest
6 голосов
/ 22 января 2011

Я очень новичок в c ++ и запутался в разнице между модульным программированием и функционально-ориентированным программированием . Я никогда не занимался модульным программированием, поэтому я просто знаю модули по определению, что он содержит функции. Так в чем же разница между последовательным (функционально-ориентированным языком) и модульным программированием? Заранее спасибо.

EDIT: Я читал об ООП в C ++. Он начал что-то вроде неструктурированного программирования , чем дал основную идею о структурированном программировании , чем модульное программирование и, наконец, OOP .

Ответы [ 3 ]

4 голосов
/ 22 января 2011

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

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

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

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

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

3 голосов
/ 22 января 2011

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

«Я никогда не занимался модульным программированием, поэтому я просто знаю модули по определению, что они содержат функции».

Модули - это уровеньвыше, чем функции.

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

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

Надеюсь, это вам пригодится.

0 голосов
/ 20 октября 2018

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

...