Подтвердить что ты не робот

Разница между модулем, библиотекой и каркасом

В популярном программировании говорят, в чем разница между этими терминами и какими являются перекрытия?

Любые связанные термины, которые я пропускаю?

4b9b3361

Ответ 1

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

Однако существуют важные отличия.

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

Определяющей характеристикой рамки является инверсия элемента управления. Рамка призывает вас, а не наоборот. (Это известно как Голливудский принцип: "Не звоните нам, мы позвоним вам".) Рамка находится под контролем. Поток управления и поток данных управляется каркасом.

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

  • кто пишет приложение,
  • каковы дыры и
  • кто заполняет отверстия.

С библиотекой вы пишете приложение, и вы оставляете скучные детали, которые заполняются библиотекой.

С фреймворком создатель структуры записывает приложение и оставляет интересные детали, которые вы заполняете.

Это может быть немного запутанным порой, потому что сама структура также может содержать скучные детали, которые автор структуры заполняет библиотеками, части, которые вы пишете, могут содержать скучные детали, которые вы заполняете библиотеками, и framework может предоставить набор связанных библиотек, которые хорошо работают с каркасом или которые часто необходимы в сочетании с каркасом. Например, вы можете использовать библиотеку генератора XML при написании веб-приложения с использованием веб-фреймворка и что библиотека XML могла бы быть предоставлена ​​каркасом или даже быть его неотъемлемой частью.

Это не означает, однако, что нет различия между библиотекой и каркасом. Различие очень ясно: инверсия управления - вот что это значит.

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

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

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

Итак, пусть recap:

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

Ответ 2

Вы можете увидеть модуль, библиотеку и структуру таким образом:

  • module = ваши пальцы
  • library = ваши руки
  • framework = ваше тело

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

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

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

просто моя интерпретация... если я ошибаюсь, исправьте меня.

Ответ 3

Моя ASCII художественная интерпретация того, что я понял из других ответов:

+-----------------------------------------------+
|  ...........................  ..............  |
|  : f1() f2()  :  f3()      :  : f4() f5()  :  |
|  :            :            :  :            :  |
|  : l1_module1 : l1_module2 :  : l2_module3 :  |
|  :            :            :  :            :  |
|  --library1-----------------  --library2----  |
|                                               |
|   application.c                               |
|                                               |
|       #include l1_module2                     |
|       #include l2_module3                     |
|                                               |
|       int main() {                            |
|           # case 'reload'                     |
|           f5();                               |
|           # case 'start'                      |
|           f1();                               |
|           # case 'stop'                       |
|           f4();                               |
|       }                                       |
|                                               |
+-----------------------------------------------+

.................................................
: FRAMEWORK_X                                   :
:                                               :
:     application start                         :
:     ...                                       :
:     application reload                        :
:     application stop                          :
:     ...                                       :
:...............................................:

Что происходит:

  • Разработчик устанавливает библиотеки1 и library2, чтобы они могли использовать функции, предусмотренные внутри этих модулей.

  • Затем они включают l1_module1 и l2_module3. (Им не нужны l1_module2).

  • Теперь они могут использовать функциональные возможности f1, f2, f4 и f5, Поэтому они пишут свое приложение.

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

Некоторые примечания:

  • На практике всегда существует некоторая структура. Например, ОС является основой для вашего приложения (именно поэтому вы определяете main())! Или вы можете сказать, что загрузчик является основой для вашей ОС и BIOS - это среда для вашего загрузчика и т.д.

Ответ 4

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

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

Ответ 5

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

Ответ 6

Я считаю, что фреймворки и библиотеки - это модули. Поскольку модули являются кодами, импортированными или экспортированными из вашего кода. Как говорится, Frameworks называет ваш код, ваш код вызывает библиотеки. В любом случае, модуль задействован

Ответ 7

С моей точки зрения a framework содержит libraries, и оба они modules.

например. В Swift a module - это единый блок распределения кода - a framework или приложение, которое создается и отправляется как единое целое.