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.
Respostas:
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
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.
fonte
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.
fonte
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 :
fonte
Você chama Biblioteca.
O Framework liga para você.
fonte
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 há 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:
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.
fonte
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.
fonte
Da perspectiva do desenvolvedor da Web:
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.
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.
fonte
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.
fonte
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.
fonte
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.
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).
fonte
É 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.
fonte
Aqui está vinculado um artigo amargo de Joel Spolsky , mas contém uma boa distinção entre caixas de ferramentas, bibliotecas, estruturas e tais
fonte
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.
fonte
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'
fonte
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.
fonte
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.
fonte
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.
fonte
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!
fonte
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.
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.
fonte