Qual é a diferença entre uma estrutura e uma biblioteca? [fechadas]

865

Qual é a diferença entre uma estrutura e uma biblioteca ?

Eu sempre pensei em uma biblioteca como um conjunto de objetos e funções que se concentra em resolver um problema específico ou uma área específica de desenvolvimento de aplicativos (por exemplo, acesso ao banco de dados); e uma estrutura, por outro lado, como uma coleção de bibliotecas centradas em uma metodologia específica (ou seja, MVC) e que abrange todas as áreas do desenvolvimento de aplicativos.

anbanm
fonte
18
@ vba4all: Como isso pode ser duplicado quando foi solicitado primeiro?
Noob Saibot
5
Só porque foi criado primeiro, não significa que não seja uma duplicata;) trata-se de identificar perguntas duplicadas / altamente semelhantes e garantir que os recursos / respostas sejam compartilhados (e a pergunta mais ativa / mais bem respondida aberta)
GrayedFox
2
Possível duplicata do Framework vs. Toolkit vs. Biblioteca
emlai
3
@tuple_cat realmente seu link parece ser o duplicado: foi solicitado após este
chharvey
1
Precisamos de alguma funcionalidade, chamamos de Biblioteca. Precisamos de algumas funcionalidades, teremos ajuda do framework e o Framework chama nosso código (por exemplo, UIKit).
Kamleshwar #

Respostas:

350

Na verdade, esses termos podem significar muitas coisas diferentes, dependendo do contexto em que são usados.

Por exemplo, no Mac OS X, as estruturas são apenas bibliotecas, agrupadas em um pacote. Dentro do pacote configurável, você encontrará uma biblioteca dinâmica real (libWhatever.dylib). A diferença entre uma biblioteca simples e a estrutura no Mac é que uma estrutura pode conter várias versões diferentes da biblioteca. Ele pode conter recursos extras (imagens, seqüências de caracteres localizadas, arquivos de dados XML, objetos de interface do usuário etc.) e, a menos que a estrutura seja liberada ao público, ela geralmente contém os arquivos .h necessários para usar a biblioteca.

Portanto, você tem tudo em um único pacote que precisa usar a biblioteca em seu aplicativo (uma biblioteca C / C ++ / Objective-C sem arquivos .h é bastante inútil, a menos que você mesmo os escreva de acordo com alguma documentação da biblioteca), em vez de vários arquivos para mover (um pacote Mac é apenas um diretório no nível Unix, mas a interface do usuário o trata como um único arquivo, praticamente como se você tivesse arquivos JAR em Java e quando você clica nele, geralmente não vê conteúdo, a menos que você selecione explicitamente para mostrar o conteúdo).

A Wikipedia chama o framework de "palavra de ordem". Ele define uma estrutura de software como

Uma estrutura de software é um design reutilizável para um sistema (ou subsistema) de software. Uma estrutura de software pode incluir programas de suporte, bibliotecas de códigos, uma linguagem de script ou outro software para ajudar a desenvolver e colar os diferentes componentes de um projeto de software. Várias partes da estrutura podem ser expostas por meio de uma API.

Então, eu diria que uma biblioteca é apenas isso, "uma biblioteca". É uma coleção de objetos / funções / métodos (dependendo do seu idioma) e seu aplicativo "vincula" a ele e, portanto, pode usar os objetos / funções / métodos. É basicamente um arquivo que contém código reutilizável que geralmente pode ser compartilhado entre vários aplicativos (você não precisa escrever o mesmo código repetidamente).

Uma estrutura pode ser tudo o que você usa no desenvolvimento de aplicativos. Pode ser uma biblioteca, uma coleção de muitas bibliotecas, uma coleção de scripts ou qualquer software necessário para criar seu aplicativo. Framework é apenas um termo muito vago.

Aqui está um artigo sobre alguém sobre o tópico " Biblioteca versus estrutura ". Pessoalmente, acho que este artigo é altamente discutível. Não está errado o que ele está dizendo lá, no entanto, ele está apenas escolhendo uma das múltiplas definições de estrutura e a compara à definição clássica de biblioteca. Por exemplo, ele diz que você precisa de uma estrutura para subclassificação. Mesmo? Eu posso ter um objeto definido em uma biblioteca, posso vincular a ele e subclassificá-lo no meu código. Não vejo como preciso de uma "estrutura" para isso. De alguma forma, ele explica como o termo estrutura é usado atualmente. É apenas uma palavra sensacionalista, como eu disse antes. Algumas empresas lançam apenas uma biblioteca normal (em qualquer sentido de uma biblioteca clássica) e a chamam de "estrutura" porque parece mais sofisticada.

Mecki
fonte
2
Interessante que em 2008, o artigo da Wikipedia descreveu "framework" como uma "palavra de ordem".
Zebrafish
2
Na IMO, uma estrutura é o ambiente do projeto "em branco".
Kulvar
514

Uma biblioteca executa operações específicas e bem definidas.

Uma estrutura é um esqueleto em que o aplicativo define a "carne" da operação preenchendo o esqueleto. O esqueleto ainda possui código para vincular as partes, mas o trabalho mais importante é feito pelo aplicativo.

Exemplos de bibliotecas: protocolos de rede, compactação, manipulação de imagem, utilitários de string, avaliação de expressões regulares, matemática. As operações são independentes.

Exemplos de estruturas: sistema de aplicativos da Web, gerenciador de plug-ins, sistema de GUI. A estrutura define o conceito, mas o aplicativo define a funcionalidade fundamental com a qual os usuários finais se preocupam.

Jason Cohen
fonte
10
+1 para exemplos reais. Btw, você se importa em esclarecer o que você quer dizer com "sistema de aplicativos da web"?
Pacerier 27/08/14
3
O @Pacerier provavelmente é algo que permite criar um aplicativo Web completo, como o Rails for Ruby ou o Sails for Node.js.
gustavohenke
Boa resposta. Você pode dar mais alguns exemplos relacionados às estruturas e bibliotecas do iOS?
NSPratik
ou Django, o framework da web para perfeccionistas com prazos.
ataque aéreo
2
Eu pensaria em preencher o esqueleto com "músculos" em vez de "carne". Eu acho que é uma analogia mais precisa porque "músculos" estão colocando o esqueleto em movimento.
Altgov3en
290

Eu acho que a principal diferença é que as estruturas seguem o " princípio de Hollywood ", ou seja, "não nos ligue, nós ligaremos para você".

De acordo com Martin Fowler :

Uma biblioteca é essencialmente um conjunto de funções que você pode chamar, atualmente organizado em classes. Cada chamada realiza algum trabalho e retorna o controle ao cliente.

Uma estrutura incorpora algum design abstrato, com mais comportamento incorporado. Para usá-lo, é necessário inserir seu comportamento em vários locais da estrutura, subclassificando ou inserindo suas próprias classes. O código da estrutura chama seu código nesses pontos.

Panos
fonte
2
@ Panos Obrigado pela explicação, mas você pode elaborar. Por exemplo, estou usando a estrutura FacebookSDK e estou chamando métodos de classe a partir dessa estrutura. A estrutura do FacebookSDK não está chamando nada no meu código, que é o oposto da sua definição, ou seja, "não ligue para nós, ligaremos para você".
Charles Robertson
4
@CharlesRobertson AFAIK O FacebookSDK é uma biblioteca cliente. Ele não pode ser classificado como uma estrutura e o motivo é óbvio (como você já notou): O FacebookSDK não está chamando nada no código do cliente. Além disso, o Facebook define o SDK da seguinte forma: "Um rico conjunto de funcionalidades do lado do cliente para adicionar plug-ins sociais, login no Facebook e chamadas à API do Graph". Nenhuma indicação para o framework ...
Panos
1
@Panos Obrigado. Acho que o ícone da mala que representa o FacebookSDK é um pouco enganador. E o nome 'FacebookSDK.framework'. O Facebook deve renomeá-lo para algo como 'FacebookSDK.dylib'? Mas obrigado por esclarecer isso. É bom saber qual é a definição correta ...
Charles Robertson
Essa é uma definição interessante. Recentemente, comecei a usar o d3.js e observei que ele geralmente é considerado um quadro. Mas qualquer que seja o código d3 que escrevi esteja dentro de um código javascript comum, não posso estender essa definição para d3.
Dileep Kumar Patchigolla
1
@Dileep A página inicial do d3.js. afirma na primeira frase: "D3.js. é uma biblioteca JavaScript para manipular documentos com base em dados". Eu acho que é errado ser considerado como uma estrutura.
Panos
243

Você chama Biblioteca.

O Framework liga para você.


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

Ian Boyd
fonte
12
Você poderia refatorar isso como um haiku?
Derek Tomes
18
@DerekTomes BTW: adicionei o formulário de haiku .
Ian Boyd
56
Sua resposta está sendo discutida no META . Você gostaria de traduzir o haiku? Eu acho que muito poucos de nós estão se perguntando se ele realmente significa Ajuda a biblioteca, andaimes dói, muitas lágrimas como Google Tradutor bastante carinho coloca-lo :)
Erros
27
É bom ver que um mod cancelou os dois primeiros comentários. Agora faz sentido o motivo pelo qual o texto em japonês foi adicionado (foi solicitado como uma piada) e foi apenas uma tentativa de traduzir, e não um poema popular em japonês.
Zanon
9
Na Rússia soviética, a estrutura chama você.
Robert Moore
242

Biblioteca:

É apenas uma coleção de rotinas (programação funcional) ou definições de classe (programação orientada a objetos). A razão por trás é simplesmente a reutilização de código , ou seja, obter o código que já foi escrito por outros desenvolvedores. As classes ou rotinas normalmente definem operações específicas em uma área específica do domínio . Por exemplo, existem algumas bibliotecas de matemática que podem permitir que o desenvolvedor chame a função sem refazer a implementação de como um algoritmo funciona.

Estrutura:

Na estrutura, todo o fluxo de controle já existe, e várias manchas brancas predefinidas que devemos preencher com nosso código . Uma estrutura é normalmente mais complexa. Ele define um esqueleto em que o aplicativo define seus próprios recursos para preencher o esqueleto. Dessa forma, seu código será chamado pela estrutura quando apropriado. O benefício é que os desenvolvedores não precisam se preocupar se um design é bom ou não, mas apenas sobre a implementação de funções específicas do domínio.

Library, Framework e sua representação de imagem de código:

Biblioteca, Framework e sua relação de imagem de código

KeyDifference:

A principal diferença entre uma biblioteca e uma estrutura é "Inversão de controle" . Quando você chama um método de uma biblioteca, você está no controle. Mas com uma estrutura, o controle é invertido: a estrutura chama você . Fonte.

Relação:

Ambos definiram a API, que é usada pelos programadores. Para reuni-los, podemos pensar em uma biblioteca como uma determinada função de um aplicativo, uma estrutura como o esqueleto do aplicativo e uma API é um conector para conectá-los. Um processo de desenvolvimento típico normalmente começa com uma estrutura e preenche as funções definidas nas bibliotecas por meio da API.

Durai Amuthan.H
fonte
14
Inversão de controle Ótima explicação detalhada!
Patricia
3
Como a imagem, resume bem e mostra também por que algumas vezes as pessoas ficam confusas, porque as estruturas também agrupam bibliotecas também.
Didier A.
1
@didibus Se você acha que a resposta dá uma boa explicação, você pode votar novamente para que os visitantes possam encontrar facilmente a resposta proveitosa.
Durai Amuthan.H
Então, o FFmpeg (não o programa, mas principalmente o LibAVUtil do projeto) é uma estrutura, e o libavcodec etc. são bibliotecas?
MarcusJ
1
@MarcusJ - O LibAVUtil e o libavcodec são bibliotecas
Durai Amuthan.H:
110

Como eu sempre descrevi:

Uma biblioteca é uma ferramenta.

Uma estrutura é um modo de vida.

Uma biblioteca que você pode usar para qualquer parte minúscula que o ajude. Uma estrutura na qual você deve comprometer todo o seu projeto.

James Curran
fonte
9
Essa resposta faz muito mais sentido depois de entender completamente os dois termos.
outro
45

Da perspectiva do desenvolvedor da Web:

  1. A biblioteca pode ser facilmente substituída por outra biblioteca. Mas o quadro não pode.

    Se você não gostar da biblioteca do seletor de datas do jquery, poderá substituí-lo por outro selecionador de datas, como o selecionador de data de inicialização ou o pickadate.

    Se você não gosta do AngularJS no qual construiu seu produto, não pode simplesmente substituir por outras estruturas. Você precisa reescrever toda a sua base de código.

  2. Principalmente a biblioteca leva muito menos curva de aprendizado em comparação com os Frameworks. Por exemplo: underscore.js é uma biblioteca, Ember.js é uma estrutura.

Fizer Khan
fonte
Melhor resposta. Simples, direto e claro.
Felipe Santiago
41

Eu gosto da resposta de Cohens, mas uma definição mais técnica é: Seu código chama uma biblioteca. Uma estrutura chama seu código . Por exemplo, uma estrutura da GUI chama seu código por meio de manipuladores de eventos. Uma estrutura da Web chama seu código através de algum modelo de solicitação-resposta.

Isso também é chamado de inversão de controle - de repente, a estrutura decide quando e como executar o código, e não o contrário, como acontece com as bibliotecas. Isso significa que uma estrutura também tem um impacto muito maior sobre como você deve estruturar seu código.

JacquesB
fonte
30

Eu esqueço onde vi essa definição, mas acho que é bem legal.

Uma biblioteca é um módulo que você chama do seu código e uma estrutura é um módulo que chama seu código.

Moe
fonte
6
Mas libc inclui qsort (), que chama seu código. Eu não acho que isso faz da libc uma estrutura.
27668 Mark Baker
O que se entende por módulo?
NattyC 22/01
18

Uma estrutura pode ser feita de diferentes bibliotecas. Vamos dar um exemplo.

Digamos que você queira cozinhar um curry de peixe. Então você precisa de ingredientes como óleo , temperos e outras utilidades . Você também precisa de peixe, que é a sua base para preparar seu prato (esses são os dados da sua aplicação). todos os ingredientes juntos chamados de estrutura . Agora você vai usá-los um por um ou em combinação para fazer seu peixe curry, que é o seu produto final . Compare isso com uma estrutura da Web composta de underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS etc. Por exemplo, Twitter Bootstrap v.35.

Agora, se você considerar apenas um ingrediente, como o óleo . Você não pode usar o óleo que quiser, pois isso estragará o seu peixe (dados). Você só pode usar azeite . Compare isso com underscore.js . Agora, qual a marca de óleo que você deseja usar depende de você. Alguns pratos foram feitos com azeite americano (underscore.js) ou azeite indiano (lodash.js). Isso mudará apenas o gosto do seu aplicativo. Como eles servem quase ao mesmo objetivo, seu uso depende da preferência do desenvolvedor e são facilmente substituíveis.

insira a descrição da imagem aqui


Estrutura : uma coleção de bibliotecas que fornecem propriedades e comportamento exclusivos para seu aplicativo. (Todos os ingredientes)

Biblioteca : um conjunto bem definido de instruções que fornece propriedades e comportamento exclusivos aos seus dados. (Óleo sobre Peixe)

Plug - in : um utilitário criado para uma biblioteca (ui-router -> AngularJS) ou muitas bibliotecas em combinação (selecionador de data -> bootstrap.css + jQuery) sem o qual seu plug-in agora pode funcionar como esperado.


PS AngularJS é uma estrutura MVC, mas uma biblioteca JavaScript. Porque acredito que a Biblioteca estende o comportamento padrão da tecnologia nativa (neste caso, o JavaScript).

Uday Hiwarale
fonte
Boa explicação :)
Mano
14

É assim que eu penso (e vi racionalizado por outros):

Uma biblioteca é algo contido no seu código. E uma estrutura é um contêiner para seu aplicativo.

Kon
fonte
10

Aqui está vinculado um artigo amargo de Joel Spolsky , mas contém uma boa distinção entre caixas de ferramentas, bibliotecas, estruturas e tais

Lorenzo Boccaccia
fonte
8

Uma biblioteca implementa a funcionalidade para uma finalidade de escopo limitado, enquanto uma estrutura tende a ser uma coleção de bibliotecas, fornecendo suporte para uma variedade maior de recursos. Por exemplo, a biblioteca System.Drawing.dll lida com a funcionalidade de desenho, mas é apenas uma parte da estrutura geral do .NET.

Jeff Yates
fonte
3
Bom ponto, que uma estrutura pode conter bibliotecas . Portanto, pode ser tanto uma estrutura na primeira quanto uma biblioteca na segunda instância. Como esse é o caso de muitas estruturas da Web, como o Apache Wicket , que definem o ciclo de processamento, mas também fornecem um grande conjunto de classes que implementam componentes de interface do usuário concretos.
OneWorld
Eu acredito que o .NET é uma biblioteca muito grande. Uma biblioteca grande demais para ser chamada de biblioteca, mas ainda assim uma biblioteca. Frameworks impõe um certo design, decide o fluxo de controle, etc, com pouco espaço para mexer. O .NET, como tal, não faz isso. Eu acredito que o .NET é uma biblioteca, enquanto o ASP.NET MVC é uma estrutura. Mas a EM precisa de boas palavras para o mercado.
Nawfal # 19/14
6

Biblioteca - Qualquer conjunto de classes ou componentes que podem ser usados ​​conforme o cliente considerar adequado para realizar uma determinada tarefa.
Estrutura - exige determinadas diretrizes para você "plug-in" em algo maior que você. Você apenas fornece as peças específicas para sua aplicação / requisitos de uma maneira exigida pela publicação, para que 'o trabalho de estrutura possa facilitar sua vida'

Gishu
fonte
6

As bibliotecas são para facilitar o uso e a eficiência. Você pode dizer, por exemplo, que a biblioteca Zend nos ajuda a realizar tarefas diferentes com suas classes e funções bem definidas. Embora uma estrutura seja algo que normalmente força uma certa maneira de implementar uma solução, como o MVC (Model -view-controller) (referência) . É um sistema bem definido para a distribuição de tarefas, como no MVC. O modelo contém o lado do banco de dados, as exibições são para interface da interface do usuário e os controladores para a lógica de negócios.

Ravi shah
fonte
5

Sua interpretação me parece muito boa ... Uma biblioteca pode ser qualquer coisa que seja compilada e independente para reutilização em outro código, não há literalmente nenhuma restrição em seu conteúdo.

A estrutura , por outro lado deverá ter uma gama de instalações para uso em alguma arena específica de desenvolvimento de aplicações, tal como o seu exemplo, MVC.

Adam Bellaire
fonte
5

Eu acho que você anotou bastante bem a diferença: a estrutura fornece um quadro no qual fazemos nosso trabalho ... De alguma forma, é mais "restritivo" do que uma simples biblioteca.
A estrutura também deve adicionar consistência a um conjunto de bibliotecas.

PhiLho
fonte
5

Penso que a biblioteca é um conjunto de utilitários para atingir uma meta (por exemplo, soquetes, criptografia etc.). Framework é biblioteca + RUNTIME EINVIRONNEMENT. Por exemplo, o ASP.NET é uma estrutura: aceita solicitações HTTP, cria objetos de página, invoca eventos de ciclo de vida curta, etc. A estrutura faz tudo isso, você escreve um pouco de código que será executado em um momento específico do ciclo de vida do pedido atual!

Enfim, pergunta muito interessante!

stefano m
fonte
5

Não me lembro da fonte dessa resposta (acho que a encontrei em um .ppt na internet), mas a resposta é bastante simples.

Uma Biblioteca e um Framework são um conjunto de classes, módulos e / ou código (dependendo da linguagem de programação) que podem ser usados ​​em seus aplicativos e ajudam a resolver um "problema" específico.

Esse problema pode ser informações de log ou depuração em um aplicativo, desenhar gráficos, criar um formato de arquivo específico (html, pdf, xls), conectar-se a uma base de dados, criar parte de um aplicativo ou aplicativo completo ou código aplicado a um aplicativo. Padrão de design .

Você pode ter um Framework ou uma Biblioteca para resolver todos esses problemas e muito mais; normalmente, os frameworks o ajudam a resolver problemas mais complexos ou maiores, mas essa é uma conseqüência da principal diferença, não uma definição principal para ambos.

A principal diferença entre uma Biblioteca e um Framework é a dependência entre seu próprio código; em outras palavras, para usar um Framework, você precisa usar quase todas as classes, módulos ou códigos no FW, mas para usar uma Biblioteca, você pode usar um ou mais algumas classes, módulos ou código na lib em seu próprio aplicativo

Isso significa que, se um Framework possui, por exemplo, 50 classes para usar o framework em um aplicativo que você precisa usar, digamos, 10 a 15 ou mais classes em seu código, porque é assim que é projetado um Framework, algumas classes (objetos dessas classes) são entradas / parâmetros para métodos em outras classes na estrutura. Consulte a estrutura .NET, Spring ou qualquer estrutura MVC.

Mas, por exemplo, uma biblioteca de logs, você pode simplesmente usar uma classe Log no seu código e ajudá-lo a resolver o "problema de log", o que não significa que a biblioteca de log não tenha mais classes no código, como classes para manipular arquivos, manipular saídas de tela ou mesmo bases de dados, mas você nunca toca / usa essas classes em seu código, e esse é o motivo pelo qual é uma biblioteca e não uma estrutura.

E também há mais categorias que Estruturas e Bibliotecas, mas isso não é assunto.

Junior Garza
fonte