На самом деле эти термины могут означать много разных вещей в зависимости от контекста, который они используют.
Например, в Mac OS X фреймворки - это просто библиотеки, упакованные в пакет. В комплекте вы найдете актуальную динамическую библиотеку (libWhwhat.dylib). Разница между пустой библиотекой и фреймворком на Mac заключается в том, что фреймворк может содержать несколько разных версий библиотеки. Он может содержать дополнительные ресурсы (изображения, локализованные строки, файлы данных XML, объекты пользовательского интерфейса и т. Д.), И если инфраструктура не является общедоступной, она обычно содержит необходимые файлы .h, необходимые для использования библиотеки.
Таким образом, в одном пакете есть все, что вам нужно, чтобы использовать библиотеку в своем приложении (библиотека C / C ++ / Objective-C без файлов .h довольно бесполезна, если вы не пишете их самостоятельно в соответствии с документацией библиотеки), а не куча файлов для перемещения (пакет Mac - это просто каталог на уровне Unix, но пользовательский интерфейс рассматривает его как один файл, почти как у вас есть файлы JAR в Java, и когда вы щелкаете по нему, вы обычно не видите что внутри, если вы явно не выбрали, чтобы показать содержимое).
Википедия называет фреймворк "модным словом". Он определяет структуру программного обеспечения как
Программная структура - это повторно используемая конструкция для программной системы (или подсистемы). Программная структура может включать в себя программы поддержки, библиотеки кодов, язык сценариев или другое программное обеспечение, помогающее разрабатывать и склеивать различные компоненты программного проекта. Различные части платформы могут быть представлены через API.
Так что я бы сказал, что библиотека - это просто библиотека. Это набор объектов / функций / методов (в зависимости от вашего языка), и ваше приложение «ссылается» на него и, таким образом, может использовать объекты / функции / методы. В основном это файл, содержащий код многократного использования, который обычно может использоваться несколькими приложениями (вам не нужно писать один и тот же код снова и снова).
Фреймворк может быть всем, что вы используете в разработке приложений. Это может быть библиотека, набор из множества библиотек, набор сценариев или любое программное обеспечение, необходимое для создания приложения. Рамки это просто очень расплывчатый термин.
Вот статья о каком-то парне на тему « Библиотека против фреймворка ». Я лично считаю , что эта статья является весьма спорной. Это не неправильно, что он говорит там, однако, он просто выбирает одно из множества определений фреймворка и сравнивает его с классическим определением библиотеки. Например, он говорит, что вам нужна структура для подклассов. В самом деле? Я могу иметь объект, определенный в библиотеке, я могу ссылаться на него и подкласс его в моем коде. Я не понимаю, как мне нужна «основа» для этого. В некотором смысле он скорее объясняет, как термин используется сегодня. Это просто раскрученное слово, как я уже говорил. Некоторые компании выпускают просто обычную библиотеку (в любом смысле классической библиотеки) и называют ее «структурой», потому что это звучит более навороченно.