Respostas:
Estou muito atrasado para responder. Mas, gostaria de compartilhar um exemplo, no qual só pensei hoje. Se eu dissesse para você cortar um pedaço de papel com dimensões de 5m por 5m, certamente você faria isso. Mas suponha que eu peça para você cortar 1000 pedaços de papel das mesmas dimensões. Nesse caso, você não fará a medição 1000 vezes; obviamente, você faria um quadro de 5m por 5m e, com a ajuda dele, seria capaz de cortar 1000 pedaços de papel em menos tempo. Então, o que você fez foi criar uma estrutura que fizesse um tipo específico de tarefa. Em vez de executar o mesmo tipo de tarefa repetidamente para o mesmo tipo de aplicativos, você cria uma estrutura que possui todos esses recursos juntos em um pacote legal, fornecendo a abstração para o seu aplicativo e, mais importante, muitos aplicativos.
Tecnicamente, você não precisa de uma estrutura. Se você está criando um site realmente muito simples (pense na Web em 1992), você pode fazer tudo isso com HTML codificado e algum CSS.
E se você deseja criar um aplicativo da web moderno, também não precisa usar uma estrutura para isso.
Em vez disso, você pode optar por escrever toda a lógica de que precisa, sempre. Você pode escrever sua própria camada de persistência / armazenamento de dados ou, se estiver muito ocupado, basta escrever SQL personalizado para cada acesso ao banco de dados. Você pode escrever suas próprias camadas de autenticação e manipulação de sessão. E seu próprio modelo de lógica de renderização. E sua própria lógica de manipulação de exceções. E suas próprias funções de segurança. E sua própria estrutura de teste de unidade para garantir que tudo funcione bem. E o seu próprio ... [continua por muito tempo]
Então, novamente, se você fazer usar um quadro , você vai ser capaz de beneficiar da boa, geralmente peer-reviewed e muito bem testado trabalho de dezenas se não centenas de outros desenvolvedores, que podem muito bem ser melhor do que você. Você poderá criar o que deseja rapidamente, sem ter que gastar tempo construindo ou se preocupando muito com os itens de infraestrutura listados acima.
Você pode fazer mais em menos tempo e saber que o código da estrutura que você está usando ou estendendo provavelmente será melhor do que você mesmo.
E o custo disso? Investindo algum tempo aprendendo a estrutura. Mas - como praticamente todos os desenvolvedores da Web atestam - definitivamente vale a pena o tempo gasto aprendendo a obter enormes (realmente, enormes) benefícios de usar qualquer estrutura que você escolher.
O resumo da Wikipedia (Software Framework) (primeiro hit do google btw) explica muito bem:
Uma estrutura de software, na programação de computadores, é uma abstração na qual o código comum que fornece funcionalidade genérica pode ser substituído ou especializado seletivamente pelo código do usuário, fornecendo funcionalidade específica. Estruturas são um caso especial de bibliotecas de software, pois são abstrações reutilizáveis de código agrupadas em uma API (Interface de programação de aplicativos) bem definida, mas contêm alguns recursos distintivos importantes que as separam das bibliotecas normais.
As estruturas de software têm esses recursos distintos que os separam das bibliotecas ou aplicativos normais do usuário:
- inversão de controle - Em uma estrutura, diferentemente das bibliotecas ou dos aplicativos normais do usuário, o fluxo geral de controle do programa não é determinado pelo chamador, mas pela estrutura. [1]
- comportamento padrão - uma estrutura tem um comportamento padrão. Esse comportamento padrão deve ser realmente um comportamento útil e não uma série de não operações.
- extensibilidade - Uma estrutura pode ser estendida pelo usuário geralmente por substituição seletiva ou especializada pelo código do usuário, fornecendo funcionalidade específica.
- código de estrutura não modificável - o código de estrutura, em geral, não pode ser modificado. Os usuários podem estender a estrutura, mas não podem modificar seu código.
Você pode "precisar" porque pode fornecer um ótimo atalho ao desenvolver aplicativos, pois ele contém muitas funcionalidades já escritas e testadas. O motivo é bastante semelhante ao motivo pelo qual usamos bibliotecas de software.
Muitas boas respostas já, mas deixe-me ver se posso lhe dar outro ponto de vista.
Simplificando bastante as coisas, é possível visualizar uma estrutura como um aplicativo completo, exceto pela funcionalidade real. Você conecta a funcionalidade e o PRESTO! você tem um aplicativo.
Considere, digamos, uma estrutura de GUI. A estrutura contém tudo o que você precisa para criar um aplicativo. De fato, muitas vezes você pode criar trivialmente um aplicativo mínimo com muito poucas linhas de origem que não fazem absolutamente nada - mas fornece gerenciamento de janelas, gerenciamento de sub-janelas, menus, barras de botões, etc. Esse é o lado da estrutura. Ao adicionar a funcionalidade do seu aplicativo e "conectá-lo" aos lugares certos na estrutura, você transforma esse aplicativo vazio que não faz nada além de gerenciamento de janelas etc. em um aplicativo real e completo.
Existem tipos semelhantes de estruturas para aplicativos da Web, aplicativos do lado do servidor etc. Em cada caso, a estrutura fornece a maior parte do código repetitivo e tedioso (espero) enquanto você fornece a funcionalidade real do domínio do problema. (Esse é o ideal. Na realidade, é claro, o sucesso da estrutura é altamente variável.)
Sublinho novamente que esta é a visão simplificada do que é uma estrutura. Não estou usando termos assustadores como "Inversão de controle" e similares, embora a maioria das estruturas possua conceitos tão assustadores. Já que você é iniciante, pensei em poupar o jargão e seguir um símile fácil.
Não sei se há uma definição clara de "framework". Às vezes, um grande conjunto de bibliotecas é chamado de estrutura, mas acho que o uso típico da palavra está mais próximo da definição que o aioobe trouxe.
Este artigo muito legal resume a diferença entre apenas um conjunto de bibliotecas e uma estrutura:
Uma estrutura pode ser definida como um conjunto de bibliotecas que dizem "Não ligue para nós, nós ligaremos para você".
Como uma estrutura ajuda você? Porque, em vez de escrever algo do zero, basicamente você apenas estende um aplicativo em funcionamento. Você obtém muita produtividade dessa maneira - às vezes o aplicativo resultante pode ser muito mais elaborado do que você poderia ter feito sozinho no mesmo período de tempo - mas você costuma trocar muita flexibilidade.
Uma explicação simples é: Uma estrutura é um andaime no qual você pode criar aplicativos.
Uma estrutura geralmente fornece algumas funcionalidades básicas das quais você pode usar e estender para criar aplicativos mais complexos. Existem estruturas para todo tipo de coisa. A estrutura MVC da Microsofts é um bom exemplo disso. Ele fornece tudo o que você precisa para sair do site de construção usando o padrão MVC, ele lida com solicitações da web, rotas e similares. Tudo o que você precisa fazer é implementar "Controladores" e fornecer "Visualizações", que são duas construções definidas pela estrutura MVC. A estrutura MVC lida com a chamada de seus controladores e a renderização de suas visualizações.
Talvez não seja o melhor texto, mas espero que ajude
no nível mais baixo, uma estrutura é um ambiente, no qual você recebe um conjunto de ferramentas para trabalhar com
essas ferramentas vêm na forma de bibliotecas, arquivos de configuração etc.
esse chamado "ambiente" fornece a configuração básica (relatórios de erros, arquivos de log, configurações de idioma etc.) ... que podem ser modificados, ampliados e desenvolvidos.
As pessoas realmente não precisam de estruturas, é apenas uma questão de economizar tempo, e outras são apenas uma questão de preferências pessoais.
As pessoas justificam que, com uma estrutura, você não precisa codificar do zero. Mas essas são apenas pessoas que confundem bibliotecas com estruturas.
Eu não estou sendo tendencioso aqui, estou realmente usando uma estrutura agora.
Uma estrutura fornece funcionalidades / soluções para a área do problema em particular.
Definição do wiki :
Uma estrutura de software, na programação de computadores, é uma abstração na qual o código comum que fornece funcionalidade genérica pode ser substituído ou especializado seletivamente pelo código do usuário, fornecendo funcionalidade específica. Estruturas são um caso especial de bibliotecas de software, pois são abstrações reutilizáveis de código agrupadas em uma API (Interface de programação de aplicativos) bem definida, mas contêm alguns recursos distintivos importantes que as separam das bibliotecas normais.
Uma estrutura nos ajuda a usar o "já criado", uma metaphore pode ser como,
acho que o material da terra é a linguagem de programação,
e, por exemplo, "uma câmera" é o programa, e você decidiu criar um notebook. Você não precisa recriar a câmera todas as vezes, basta usar a estrutura da terra (por exemplo, uma loja de tecnologia), pegar a câmera e integrá-la ao seu notebook.
Uma estrutura possui algumas funções que você pode precisar. talvez você precise de algum tipo de matriz que possua mecanismos de classificação incorporados. Ou talvez você precise de uma janela na qual deseja colocar alguns controles, tudo o que você pode encontrar em uma estrutura. é um tipo de trabalho que abrange um QUADRO em torno do seu próprio trabalho.
EDIT: OK, estou prestes a cavar o que vocês estavam tentando me dizer;) talvez você não tenha notado as informações entre as linhas "TRABALHO que abrange um QUADRO ..." antes que isso fique cada vez mais profundo. Eu tento dar uma palavra a ele, esperando que você seja gentil:
uma boa explicação para a pergunta "Diferença entre uma biblioteca e um framework" que encontrei aqui
http://ifacethoughts.net/2007/06/04/difference-between- uma biblioteca e uma estrutura /
Além das definições, que às vezes são compreensíveis apenas se você já entende, um exemplo me ajudou.
Acho que tive um vislumbre de entendimento ao tentar classificar uma lista no .Net; um exemplo de estrutura que fornece uma funcionalidade adaptada ao código do usuário que fornece funcionalidade específica. Tome List.Sort (IComparer). O algoritmo de classificação, que reside na estrutura .Net no método Sort, precisa fazer uma série de comparações; o objeto A vem antes ou depois do objeto B? Mas o próprio Sort não tem idéia de como fazer a comparação; somente o tipo que está sendo classificado sabe disso. Você não pode escrever um algoritmo de classificação de comparação que possa ser reutilizado por muitos usuários e prever todos os vários tipos que você deve ordenar. Você precisa deixar esse trabalho para o próprio usuário. Então aqui, classificar, também conhecido como framework, chama de volta para um método no código do usuário, o tipo sendo classificado para que ele possa fazer a comparação. (Ou um delegado pode ser usado;
Eu entendi direito?