O que é uma estrutura de software? [fechadas]

193

Alguém pode me explicar o que é uma estrutura de software? Por que precisamos de uma estrutura? O que uma estrutura faz para facilitar a programação?

Ansioso
fonte

Respostas:

422

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.

Neha Choudhary
fonte
27
Gostaria de saber o motivo do voto negativo na resposta. Isso me ajudará a melhorá-lo.
Neha Choudhary
4
arrefecer muito fácil de entender ........... graças monte
Premkumar
25
@ NehaChoudhary, não eu, mas ele -1, porque o que você está falando é uma biblioteca, não uma estrutura, já que não há IoC.
Pacerier 27/08/14
11
Eu li sua postagem, mas o que você publica parece o que uma biblioteca pode fazer. Que tal explicar a diferença entre estrutura e biblioteca?
Aaron Liu
2
Eu não entendo Pelo que você explicou, seria mais uma biblioteca, certo?
router
92

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.

Steve Jalim
fonte
17
Por que não colocar essa energia em contribuir para uma estrutura de código aberto, em vez de atacar suas próprias coisas? Sozinho, podemos mover pedras; juntos podemos mover montanhas 'e tudo mais #
Steve Jalim
7
@ Jeffffrey "Então, como você aprenderá? Como você crescerá como programador?" Aprenda da maneira que desejar, mas se pretende trabalhar para um cliente real, você deve fornecer a melhor solução possível no menor tempo possível. O seu código "provavelmente com erros" não é aceitável para isso.
Cmorales
6
@Cmorales, se você quer aprender uma linguagem de programação ou qualquer problema específico de domínio que você certamente não vai ter qualquer cliente "real" (e você vai, eventualmente, ter um monte de tempo em sua mão) e que é por isso que eu sugiro que novatos para não começar a partir de estruturas.
Shoe
3
@ Jeffffrey Você não disse nada sobre iniciantes no seu comentário, foi geral. Concordo que você deveria aprender por conta própria primeiro, mas seu comentário não especificou isso e, na vida real (profissional), você não pode se dar ao luxo de usar o código de buggy apenas para aprender. Conheço alguns caras que não usam estruturas porque pensam que sabem melhor ... e gastam o dobro do tempo para cada projeto.
Cmorales
1
@Cmorales Também conheço algumas pessoas que usam frameworks, mas também levam o dobro do tempo para cada projeto. A velocidade de programação nem sempre está relacionada às ferramentas que estão sendo usadas.
Cypher
53

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:

  1. 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]
  2. 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.
  3. 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.
  4. 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.

aioobe
fonte
13
a parte branca da sua resposta era muito mais melhor do que a parte cinzenta, de acordo com o tipo de pergunta ...
OlimilOops
Tenho certeza de que a pessoa que fez a pergunta também encontrou a entrada da Wikipedia ... Ele / ela provavelmente procurou uma resposta mais abrangente.
Stophface
31

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.

APENAS MINHA OPINIÃO correta
fonte
14

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.

Carvalho
fonte
8

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

Sekhat
fonte
1
Na verdade, é mais como criar aplicativos no andaime do que em torno dele.
Jörg W Mittag
4

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.

yretuta
fonte
4

Em geral, um trabalho de estrutura é uma estrutura real ou conceitual destinada a servir de suporte ou guia para a construção de algo que expande a estrutura em algo útil ...

uma
fonte
2

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.

Soe Moe
fonte
Há uma palavra na primeira frase "abstração". O que você quer dizer com isso ? onde usamos a abstração?
Kumaresan Perumal
2

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.

stckvrflw
fonte
2

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 /

OlimilOops
fonte
totalmente não entendo os votos negativos ... Estou completamente surpreso com isso. a questão é o tipo de iniciante pergunta básica e minha resposta foi de acordo com que bastante boa ...
OlimilOops
4
Para ser claro: não votei. No entanto, o que você está falando está em um nível muito inferior ao que a estrutura está preocupada. Coleções e algoritmos de classificação são mais bibliotecas padrão do que Frameworks, por exemplo.
precisa saber é
1
obrigado pela resposta, mas ... não é a resposta para minha pergunta. de acordo com a pergunta do OP, distinguir entre "biblioteca padrão" e "estrutura" é o lugar errado aqui. por exemplo, no .net-framework, você pode encontrar as coleções de namespace em uma parte do framework. Nunca ouvi alguém dizer que a coleção de namespace não faz parte do framework .net. para que a sua resposta à minha pergunta está errada
OlimilOops
1
Esta é a definição de uma biblioteca . Falta o traço distintivo de uma estrutura em oposição a uma biblioteca: Inversão de Controle .
Jörg W Mittag
2

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?

BillB
fonte