¿Cuál es la diferencia entre un marco y una biblioteca?

865

¿Cuál es la diferencia entre un marco y una biblioteca ?

Siempre pensé en una biblioteca como un conjunto de objetos y funciones que se centran en resolver un problema particular o un área específica de desarrollo de aplicaciones (es decir, acceso a la base de datos); y, por otro lado, un marco como una colección de bibliotecas centradas en una metodología particular (es decir, MVC) y que cubre todas las áreas de desarrollo de aplicaciones.

anbanm
fuente
18
@ vba4all: ¿Cómo puede ser esto un duplicado cuando se le preguntó primero?
Noob Saibot
55
El hecho de que se haya creado primero no significa que no sea un duplicado;) se trata solo de identificar preguntas duplicadas / muy similares, y garantizar que se compartan recursos / respuestas (y se abra la pregunta más activa / mejor respondida)
GrayedFox
2
Posible duplicado de Framework vs. Toolkit vs. Library
emlai
3
@tuple_cat en realidad su enlace parece ser el duplicado: se le preguntó después de este
chharvey
1
Necesitamos alguna funcionalidad, llamamos Biblioteca. Necesitamos algunas funcionalidades, tomaremos la ayuda de framework y Framework llama a nuestro código (Ej. UIKit)
Kamleshwar

Respuestas:

350

En realidad, estos términos pueden significar muchas cosas diferentes dependiendo del contexto en el que se usan.

Por ejemplo, en Mac OS X, los marcos son solo bibliotecas, agrupadas en un paquete. Dentro del paquete encontrará una biblioteca dinámica real (libWhatever.dylib). La diferencia entre una biblioteca simple y el framework en Mac es que un framework puede contener múltiples versiones diferentes de la biblioteca. Puede contener recursos adicionales (imágenes, cadenas localizadas, archivos de datos XML, objetos de interfaz de usuario, etc.) y, a menos que el marco se publique, generalmente contiene los archivos .h necesarios que necesita para usar la biblioteca.

Por lo tanto, tiene todo dentro de un solo paquete que necesita para usar la biblioteca en su aplicación (una biblioteca C / C ++ / Objective-C sin archivos .h es bastante inútil, a menos que los escriba usted mismo de acuerdo con alguna documentación de la biblioteca), en lugar de un montón de archivos para moverse (un paquete de Mac es solo un directorio en el nivel Unix, pero la interfaz de usuario lo trata como un solo archivo, más o menos como si tuviera archivos JAR en Java y cuando hace clic en él, generalmente no ve lo que hay dentro, a menos que seleccione explícitamente mostrar el contenido).

Wikipedia llama a framework una "palabra de moda". Define un marco de software como

Un marco de software es un diseño reutilizable para un sistema de software (o subsistema). Un marco de software puede incluir programas de soporte, bibliotecas de códigos, un lenguaje de secuencias de comandos u otro software para ayudar a desarrollar y pegar los diferentes componentes de un proyecto de software. Varias partes del marco pueden estar expuestas a través de una API.

Entonces diría que una biblioteca es solo eso, "una biblioteca". Es una colección de objetos / funciones / métodos (dependiendo de su idioma) y su aplicación "enlaza" contra él y, por lo tanto, puede usar los objetos / funciones / métodos. Básicamente es un archivo que contiene código reutilizable que generalmente se puede compartir entre múltiples aplicaciones (no tiene que escribir el mismo código una y otra vez).

Un marco puede ser todo lo que usa en el desarrollo de aplicaciones. Puede ser una biblioteca, una colección de muchas bibliotecas, una colección de scripts o cualquier pieza de software que necesite para crear su aplicación. Marco es solo un término muy vago.

Aquí hay un artículo sobre un tipo sobre el tema " Biblioteca vs. Framework ". Personalmente, creo que este artículo es muy discutible. No está mal lo que dice allí, sin embargo, solo está eligiendo una de las múltiples definiciones de marco y compara eso con la definición clásica de biblioteca. Por ejemplo, dice que necesita un marco para subclasificar. De Verdad? Puedo tener un objeto definido en una biblioteca, puedo vincularlo y subclasificarlo en mi código. No veo cómo necesito un "marco" para eso. De alguna manera, más bien explica cómo se usa el término marco hoy en día. Es solo una palabra publicitada, como dije antes. Algunas compañías lanzan solo una biblioteca normal (en cualquier sentido de una biblioteca clásica) y la llaman un "marco" porque suena más elegante.

Mecki
fuente
2
Es interesante que en 2008, el artículo de Wikipedia describiera "framework" como una "palabra de moda".
Zebrafish
2
En mi opinión, un marco es el entorno del proyecto "en blanco".
Kulvar
514

Una biblioteca realiza operaciones específicas bien definidas.

Un marco es un esqueleto donde la aplicación define la "carne" de la operación al completar el esqueleto. El esqueleto aún tiene código para vincular las partes, pero la aplicación realiza el trabajo más importante.

Ejemplos de bibliotecas: protocolos de red, compresión, manipulación de imágenes, utilidades de cadena, evaluación de expresiones regulares, matemáticas. Las operaciones son autónomas.

Ejemplos de marcos: sistema de aplicación web, administrador de complementos, sistema GUI. El marco define el concepto, pero la aplicación define la funcionalidad fundamental que les interesa a los usuarios finales.

Jason Cohen
fuente
10
+1 para ejemplos reales. Por cierto, ¿te importaría aclarar qué quieres decir con "sistema de aplicación web"?
Pacerier
3
@Pacerier probablemente sea algo que le permita crear una aplicación web completa, como Rails for Ruby o Sails for Node.js.
gustavohenke
Buena respuesta. ¿Puedes dar más ejemplos relacionados con los marcos y bibliotecas de iOS?
NSPratik
o Django, el marco web para perfeccionistas con plazos.
ataque aéreo
2
Pensaría en llenar el esqueleto con 'músculos' en lugar de 'carne'. Creo que es una analogía más precisa porque los 'músculos' están poniendo el esqueleto en movimiento.
altgov3en
290

Creo que la principal diferencia es que los marcos siguen el " principio de Hollywood ", es decir, "no nos llames, te llamaremos".

De acuerdo con Martin Fowler :

Una biblioteca es esencialmente un conjunto de funciones a las que puede llamar, en estos días generalmente organizadas en clases. Cada llamada hace algo de trabajo y devuelve el control al cliente.

Un marco incorpora un diseño abstracto, con más comportamiento incorporado. Para usarlo, debe insertar su comportamiento en varios lugares del marco, ya sea subclasificando o conectando sus propias clases. El código del marco luego llama a su código en estos puntos.

Panos
fuente
2
@Panos Gracias por la explicación, pero ¿puedes dar más detalles? Por ejemplo, estoy usando el marco FacebookSDK, y estoy llamando a métodos de clase desde este marco. El marco de FacebookSDK no llama a nada en mi código, que es lo opuesto a su definición, es decir, "no nos llame, lo llamaremos".
Charles Robertson
44
@CharlesRobertson AFAIK FacebookSDK es una biblioteca cliente. No se puede clasificar como un marco y la razón es obvia (como ya lo notó): el FacebookSDK no está llamando a nada en el código del cliente. Además, Facebook define el SDK de la siguiente manera: "Un amplio conjunto de funcionalidades del lado del cliente para agregar complementos sociales, inicio de sesión en Facebook y llamadas a Graph API". No hay indicación para el marco ...
Panos
1
@Panos Gracias. Supongo que el icono de la maleta que representa el FacebookSDK es un poco engañoso entonces. Y el nombre 'FacebookSDK.framework'. ¿Facebook debería cambiarle el nombre a algo como 'FacebookSDK.dylib'? Pero gracias por aclarar esto. Es bueno saber cuál es la definición correcta ...
Charles Robertson
Esa es una definición interesante. Recientemente comencé a usar d3.js, y observé que generalmente se considera como un marco. Pero cualquier código d3 que escribí está dentro de un código javascript habitual, por lo que no puedo extender esta definición a d3.
Dileep Kumar Patchigolla
1
@Dileep La página de inicio de d3.js dice en la primera oración: "D3.js es una biblioteca de JavaScript para manipular documentos basados ​​en datos". Creo que está mal ser considerado como un marco.
Panos
243

Tú llamas a la biblioteca.

Framework te llama.


図 書館 助 け
足 場 が 痛 い
多 く の 涙

Ian Boyd
fuente
12
¿Podrías refactorizar esto como un haiku?
Derek Tomes
18
@DerekTomes BTW: agregué el formulario haiku .
Ian Boyd
56
Su respuesta se está discutiendo en META . ¿Te gustaría traducir el haiku? Creo que un buen número de nosotros se preguntan si realmente hace media Ayuda la biblioteca, andamios duele, muchas lágrimas como Google Traductor bastante cariño que pone :)
Errores
27
Es bueno ver que un mod borró los dos primeros comentarios. Ahora tiene sentido por qué se agregó el texto en japonés (se solicitó como una broma) y que fue solo un intento de traducción, y no un poema japonés realmente popular.
Zanon
99
En la Rusia soviética, el marco te llama.
Robert Moore
242

Biblioteca:

Es solo una colección de rutinas (programación funcional) o definiciones de clase (programación orientada a objetos). La razón detrás es simplemente la reutilización del código , es decir, obtener el código que ya ha sido escrito por otros desarrolladores. Las clases o rutinas normalmente definen operaciones específicas en un área específica del dominio . Por ejemplo, hay algunas bibliotecas de matemáticas que pueden permitir al desarrollador simplemente llamar a la función sin rehacer la implementación de cómo funciona un algoritmo.

Marco de referencia:

En el marco, todo el flujo de control ya está allí, y hay un montón de puntos blancos predefinidos que debemos completar con nuestro código . Un marco es normalmente más complejo. Se define un esqueleto donde la aplicación define sus propias características para llenar el esqueleto. De esta forma, el marco llamará a su código cuando sea apropiado. El beneficio es que los desarrolladores no necesitan preocuparse por si un diseño es bueno o no, sino solo por implementar funciones específicas del dominio.

Biblioteca, marco y su representación de imagen de código:

Biblioteca, marco y su relación de imagen de código

Diferencia clave:

La diferencia clave entre una biblioteca y un marco es "Inversión de control" . Cuando llamas a un método desde una biblioteca, tienes el control. Pero con un marco, el control se invierte: el marco te llama . Fuente.

Relación:

Ambos definieron API, que se usa para que los programadores la usen. Para unirlos, podemos pensar en una biblioteca como una determinada función de una aplicación, un marco como el esqueleto de la aplicación y una API es un conector para unirlos. Un proceso de desarrollo típico normalmente comienza con un marco y completa funciones definidas en bibliotecas a través de API.

Durai Amuthan.H
fuente
14
Inversión de control ¡ Gran explicación en profundidad!
Patricia
3
Al igual que la imagen, lo resume bien, y muestra también por qué a veces la gente se confunde, porque los marcos a menudo también agrupan bibliotecas.
Didier A.
1
@didibus Si crees que la respuesta da una buena explicación, podrías votar la respuesta para que los espectadores de la publicación puedan encontrar fácilmente la respuesta fructífera.
Durai Amuthan. H
Entonces, FFmpeg (no el programa, sino principalmente LibAVUtil del proyecto) es un marco, y libavcodec, etc., son bibliotecas.
MarcusJ
1
@MarcusJ - Tanto LibAVUtil como libavcodec son bibliotecas
Durai Amuthan.H
110

Como siempre lo he descrito:

Una biblioteca es una herramienta.

Un marco es una forma de vida.

Una biblioteca en la que puedes usar cualquier parte pequeña que te ayude. Un marco al que debe comprometer todo su proyecto.

James Curran
fuente
99
Esta respuesta tiene mucho más sentido después de comprender completamente ambos términos.
otro
45

Desde la perspectiva del desarrollador web:

  1. La biblioteca puede ser fácilmente reemplazable por otra biblioteca. Pero el marco no puede.

    Si no le gusta la biblioteca jquery date picker, puede reemplazarla con otro selector de fecha, como bootstrap date selector o pickadate.

    Si no le gusta AngularJS en el que construyó su producto, no puede simplemente reemplazarlo con ningún otro marco. Tienes que reescribir toda tu base de código.

  2. En su mayoría, la biblioteca toma menos curva de aprendizaje en comparación con Frameworks. Por ejemplo: underscore.js es una biblioteca, Ember.js es un framework.

Fizer Khan
fuente
La mejor respuesta. Simple, directo y claro.
Felipe Santiago
41

Me gusta la respuesta de Cohens, pero una definición más técnica es: su código llama a una biblioteca. Un marco llama a tu código . Por ejemplo, un marco GUI llama a su código a través de controladores de eventos. Un marco web llama a su código a través de algún modelo de solicitud-respuesta.

Esto también se llama inversión de control : de repente, el marco decide cuándo y cómo ejecutar su código en lugar de lo contrario, como ocurre con las bibliotecas. Esto significa que un marco también tiene un impacto mucho mayor en cómo debe estructurar su código.

JacquesB
fuente
30

Olvidé dónde vi esta definición, pero creo que es bastante agradable.

Una biblioteca es un módulo al que llama desde su código, y un framework es un módulo que llama a su código.

Moe
fuente
66
Pero libc incluye qsort (), que llama a su código. No creo que eso haga de libc un framework.
Mark Baker,
¿Qué se entiende por módulo?
NattyC
18

Un marco puede estar hecho de diferentes bibliotecas. Pongamos un ejemplo.

Digamos que quieres cocinar un pescado al curry. Entonces necesitas ingredientes como aceite , especias y otras utilidades . También necesita pescado, que es su base para preparar su plato (Estos son datos de su aplicación). Todos los ingredientes juntos se llaman marco . Ahora los usará uno por uno o en combinación para preparar su pescado al curry, que es su producto final . Compare eso con un marco web que está hecho de underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS , etc. Por ejemplo, Twitter Bootstrap v.35.

Ahora, si considera solo un ingrediente, como decir aceite . No puedes usar el aceite que quieras porque arruinará tu pescado (datos). Solo puedes usar aceite de oliva . Compare eso con underscore.js . Ahora, qué marca de aceite desea utilizar depende de usted. Algunos platos se hicieron con aceite de oliva americano (underscore.js) o aceite de oliva indio (lodash.js). Esto solo cambiará el sabor de su aplicación. Dado que tienen casi el mismo propósito, su uso depende de la preferencia del desarrollador y son fácilmente reemplazables.

ingrese la descripción de la imagen aquí


Framework : una colección de bibliotecas que proporcionan propiedades y comportamiento únicos a su aplicación. (Todos los ingredientes)

Biblioteca : un conjunto bien definido de instrucciones que proporcionan propiedades y comportamiento únicos a sus datos. (Aceite de pescado)

Complemento : una compilación de utilidad para una biblioteca (ui-router -> AngularJS) o muchas bibliotecas en combinación (selector de fecha -> bootstrap.css + jQuery) sin la cual su complemento ahora podría funcionar como se esperaba.


PS AngularJS es un marco MVC pero una biblioteca de JavaScript. Porque creo que Library extiende el comportamiento predeterminado de la tecnología nativa (JavaScript en este caso).

Uday Hiwarale
fuente
Buena explicación :)
Mano
14

Así es como lo pienso (y he visto racionalizado por otros):

Una biblioteca es algo contenido en su código. Y un marco es un contenedor para su aplicación.

Kon
fuente
8

Una biblioteca implementa la funcionalidad para un propósito de alcance limitado, mientras que un marco tiende a ser una colección de bibliotecas que brindan soporte para una gama más amplia de características. Por ejemplo, la biblioteca System.Drawing.dll maneja la funcionalidad de dibujo, pero es solo una parte del marco general .NET.

Jeff Yates
fuente
3
Buen punto, que un marco puede contener bibliotecas . Entonces, puede ser ambos, un marco en la primera y una biblioteca en la segunda instancia. Como este es el caso de muchos frameworks web como Apache Wicket , que definen el ciclo de procesamiento pero también proporcionan un gran conjunto de clases que implementan componentes concretos de interfaz de usuario.
OneWorld
Creo que .NET es una biblioteca muy grande. Una biblioteca demasiado grande para ser llamada biblioteca, pero sigue siendo una biblioteca. Frameworks impone un cierto diseño, decide el flujo de control, etc. con poco espacio para retocar. .NET como tal no hace eso. Creo que .NET es una biblioteca, mientras que ASP.NET MVC es un marco. Pero MS necesita buenas palabras para comercializar.
nawfal
6

Biblioteca: cualquier conjunto de clases o componentes que se pueden usar según el cliente lo considere adecuado para realizar una determinada tarea.
Marco: exige ciertas pautas para que usted "se conecte" a algo más grande que usted. Simplemente proporciona las piezas específicas para su aplicación / requisitos de una manera requerida publicada, de modo que "el marco puede hacer su vida más fácil"

Gishu
fuente
6

Las bibliotecas son fáciles de usar y eficientes. Puede decir, por ejemplo, que la biblioteca Zend nos ayuda a realizar diferentes tareas con sus clases y funciones bien definidas. Si bien un marco es algo que generalmente obliga a una determinada forma de implementar una solución, como MVC (Modelo -view-controller) (referencia) . Es un sistema bien definido para la distribución de tareas como en MVC. El modelo contiene el lado de la base de datos, las vistas son para la interfaz de usuario y los controladores son para la lógica de negocios.

Ravi Shah
fuente
5

Su interpretación me suena bastante bien ... Una biblioteca podría ser cualquier cosa compilada y autocontenida para su reutilización en otro código, literalmente no hay restricción en su contenido.

Por otro lado, se espera que un marco tenga una variedad de instalaciones para su uso en algún campo específico de desarrollo de aplicaciones, como su ejemplo, MVC.

Adam Bellaire
fuente
5

Creo que usted precisó bastante bien la diferencia: el marco proporciona un marco en el que hacemos nuestro trabajo ... De alguna manera, es más "restrictivo" que una biblioteca simple.
También se supone que el marco agrega coherencia a un conjunto de bibliotecas.

PhiLho
fuente
5

Creo que la biblioteca es un conjunto de utilidades para alcanzar un objetivo (por ejemplo, sockets, criptografía, etc.). Framework es library + RUNTIME EINVIRONNEMENT. Por ejemplo, ASP.NET es un marco: acepta solicitudes HTTP, crea objetos de página, invoca eventos de lyfe cicle, etc. El marco hace todo esto, usted escribe un bit de código que se ejecutará en un momento específico del ciclo de vida de solicitud actual!

De todos modos, una pregunta muy interesante!

stefano m
fuente
5

No recuerdo la fuente de esta respuesta (supongo que la encontré en un archivo .ppt en Internet), pero la respuesta es bastante simple.

Una Biblioteca y un Marco son un conjunto de clases, módulos y / o códigos (dependiendo del lenguaje de programación) que pueden usarse en sus aplicaciones y lo ayudan a resolver un "problema" específico.

Ese problema puede ser registrar o depurar información en una aplicación, dibujar gráficos, crear un formato de archivo específico (html, pdf, xls), conectarse a una base de datos, crear una parte de una aplicación o una aplicación completa o un código aplicado a un patrón de diseño .

Puede tener un Marco o una Biblioteca para resolver todos estos problemas y muchos más, normalmente los marcos lo ayudan a resolver problemas más complejos o más grandes, pero eso es una consecuencia de su principal diferencia, no una definición principal para ambos.

La principal diferencia entre una Biblioteca y un Marco es la dependencia entre su propio código, en otras palabras, para usar un Marco, necesita usar casi todas las clases, módulos o código en el FW, pero para usar una Biblioteca puede usar uno o pocas clases, módulos o código en la biblioteca en su propia aplicación

Esto significa que si un Framework tiene, por ejemplo, 50 clases para usar el framework en una aplicación que necesita usar, digamos, 10-15 o más clases en su código, porque así es como está diseñado un Framework, algunos Las clases (objetos de esas clases) son entradas / parámetros para métodos en otras clases en el marco. Vea el marco .NET, Spring o cualquier marco MVC.

Pero, por ejemplo, una biblioteca de registro, puede usar una clase de registro en su código y le ayuda a resolver el "problema de registro", eso no significa que la biblioteca de registro no tenga más clases en su código, como las clases para manejar archivos, manejar salidas de pantalla o incluso bases de datos, pero nunca toca / usa esas clases en su código, y esa es la razón por la cual es una biblioteca y no un marco.

Y también hay más categorías que Marcos y Bibliotecas, pero eso está fuera de tema.

Junior Garza
fuente