Framework

Em desenvolvimento de software, um framework ou arcabouço é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica. Um framework pode atingir uma funcionalidade específica, por configuração, durante a programação de uma aplicação. Ao contrário das bibliotecas é o framework quem dita o fluxo de controle da aplicação chamado de Inversão de Controle.

 

"Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação."
— FAYAD e SCHMIDT

 

O framework é um tipo de estrutura utilizada para o desenvolvimento de softwares. Ele tem como características ser bem documentado, fácil de usar e extensível (ou seja, pode ser completado com outras categorias e informações). Também é bastante eficiente.

O framework se insere como atividade colaborativa por excelência. Ele surge como uma forma objetiva de se criar colaborativamente quadros conceituais que possam fornecer diretrizes para um bom desenvolvimento de software tanto acadêmico quanto comercial.

Framework de software X Framework conceitual

Framework conceitual é um conjunto de conceitos usado para resolver um problema de um domínio específico. Framework conceitual não se trata de um software executável, mas sim de um modelo de dados para um domínio.

Framework de software compreende de um conjunto de classes implementadas em uma linguagem específica, usadas para auxiliar o desenvolvimento de software.

O framework atua onde há funcionalidades em comum a várias aplicações, porém para isso as aplicações devem ter algo razoavelmente grande em comum para que o mesmo possa atingir a várias aplicações.

Diferenças entre Framework e Design Pattern

  • Design Pattern são mais abstratos que framework
  • Um framework inclui código, diferentemente de um design pattern
  • Um framework pode conter vários design patterns, mas o contrário nunca ocorrerá
  • Frameworks sempre terão um domínio de aplicação particular, enquanto design patterns não ditam uma arquitetura de aplicação particular.

Quais as vantagens em usar frameworks?

  • Ajuda fácil: Os que desenvolvem frameworks geralmente disponibilizam material de qualidade nos websites ou repositórios oficiais, com uma vasta documentação a respeito. Além disso, os bons frameworks sempre têm uma comunidade de desenvolvedores dispostos a se ajudarem entre si.
  • Curva de aprendizado: Muitos pensam que isso é uma barreira do framework. Pois, além do profissional ter que saber como programar em uma determinada linguagem, ele terá que aprender como utilizar o framework. Isso é uma meia-verdade, pois, uma vez utilizando um framework conhecido, a possibilidade de encontrar um profissional que já conheça esse framework é bastante alta. Outro fato é que se o framework é conhecido, devem existir diversas fontes de aprendizado disponibilizado na internet.
  • Documentação: Sendo uma proposta de base para uso por outros desenvolvedores, os frameworks contêm códigos que muito deles podem entender o que é feito. Porém, como o foco é produtividade, na maioria dos casos, é importante apenas que os desenvolvedores que vão usar o framework saibam como usar suas ferramentas sem a necessidade de saber como elas foram produzidas. Para isso existe a documentação de “como usar”, o que geralmente chamamos de manual. Mas se acaso o desenvolvedor precisa saber de alguma peculiaridade de alguma ferramenta do framework, ele pode acessar a documentação de como ela foi desenvolvida, o que é comumente chamada “guia de referência”. Esse fato é interessante, pois, em muitos casos contagiam as pessoas que vão usar o framework, fazendo que elas adotem a mesma doutrina.
  • Economia de tempo: O que você demoraria algumas horas ou alguns dias para fazer, você encontra pronto em um framework. Pense nas quão trabalhosas aquelas funções de manipulação de imagens são; usando um framework que tenha isso, você só usa, e pronto.
  • Extensibilidade: Os frameworks permitem que você entenda suas funcionalidades nativas. Se aquela biblioteca de envio de e-mails por SMTP não contempla todas as possibilidades que você gostaria, simplesmente estenda suas funcionalidades e as use como se fossem parte do framework.
  • Melhores Práticas: Um framework não é desenvolvido da noite para o dia, sem um planejamento. Pelo menos não deveria ser. As pessoas que estão por trás do desenvolvimento de um framework, são geralmente pessoas experientes, que sabem os benefícios e as desvantagens do uso de algumas técnicas. Portanto, eles os fazem seguindo as melhores práticas, ou algo perto disso. O que dá suporte ao software escrito sobre ele ter muita qualidade.
  • Padronização: Um framework, na maioria das vezes é escrito por vários desenvolvedores. Todos eles entendem que cada um tem um pensamento, e cada um escreve um código de forma diferente. Mas como o framework propõe ser uma solução genérica para diversas aplicações, consequentemente para diversos desenvolvedores, logo é definido um padrão de como os códigos serão escritos. Sendo assim, aplicando uma das boas práticas de desenvolvimento de software.
  • Produtividade: Como o framework foi planejado anteriormente, todo o trabalho massivo, como o pensamento da arquitetura, e como vão funcionar os fluxos de informações e o acesso a ela já vem implementado. A única coisa que é necessária implementar é as particularidades do seu negócio, como o que fazer com as informações recebidas, e o que fazer com as informações geradas.
  • Segurança: Os bons frameworks são projetados de modo a garantir a segurança de quem programa e, principalmente, de quem usa o que foi feito a partir dele. Não se preocupe mais com aquelas intermináveis linhas de código para evitar um SQL Injection, por exemplo; com frameworks, a parte de segurança já “vem de fábrica”.
  • Utilidade: O objetivo primeiro dos frameworks é auxiliar no desenvolvimento de aplicações e softwares. Para tal, eles têm funcionalidades nativas das mais variadas, que ajudam você a resolver as questões sobre programação do dia-a-dia com muito mais qualidade e eficiência.

Barreiras

A decisão de usar um framework apresenta seus benefícios, porém, defronta com algumas barreiras:

  • Mudança: Toda mudança é difícil, complicada e destrutiva. Difícil porquê muitas pessoas tem receio de que possa parecer que o que estavam fazendo até agora não era bom o bastante. Complicada, pois é preciso pensar no impacto que ela vai causar, e as vezes com incertezas. Destrutiva: Geralmente são custosas e desgastantes, e mudam todo um paradigma já concebido. Porém, apesar desses empecilhos. Em diversos casos as mudanças são necessárias.
  • Performance: Como os frameworks são planejados para prover uma solução genérica, muitos deles não leva em conta o quesito performance, e acabam sendo muito mais lentos do que uma solução personalizada. Isso é óbvio, devido que cada projeto apresenta necessidades diferentes. Mas há frameworks que se propõe a garantir uma boa performance de processamento.

Passado

Framework não é uma coisa nova. Antigamente muitos utilizavam framework, mas não denominavam como tal. Geralmente eram conjuntos próprios de bibliotecas e funções.

Tendo isso, um desenvolvedor ou uma equipe de desenvolvedores de uma empresa criava um esqueleto de uma aplicação padrão. Isso era um framework, porém, devido a necessidade de atender o mercado rapidamente nesses casos é muito difícil ver tais frameworks aplicando as melhores práticas de desenvolvimento.

Presente e Futuro

Hoje, vemos diversas empresas adotando de pronta mão algum framework. Pois os benefícios são realmente compensadores. Pode apenas haver uma diferença entre os portes de organizações. Grandes organizações irão personalizar (algumas já fazem) os frameworks existentes para obter maior performance e maior produtividade. Médias e pequenas organizações irão utilizar apenas pela produtividade e a facilidade de encontrar profissionais capacitados.

Tipos de Framework

  Framework Vertical

  • Tenta resolver problemas de um domínio;
  • Usado em vários softwares do mesmo domínio;
  • Exemplos: Framework financeiro, recursos humanos.

Frameworks verticais são confeccionados através da experiência obtida em um determinado contexto específico. Esses são mais comumente chamados de Frameworks especialistas.

Após alguns projetos em um domínio específico serão percebidos pontos semelhantes entre estes projetos. E são nestes pontos que será construído o Framework vertical(especialista).

  Framework Horizontal

  • Não depende do domínio da aplicação;
  • Pode ser usado em diferentes domínios;
  • Exemplos: Interfaces gráficas, persistência, transação.

  Orientação a Objeto

Especificamente em orientação a objeto, framework é um conjunto de classes com objetivo de reutilização de um design, provendo um guia para uma solução de arquitetura em um domínio específico de software.

Framework se diferencia de uma simples biblioteca (toolkit), pois esta se concentra apenas em oferecer implementação de funcionalidades, sem definir a reutilização de uma solução de arquitetura (design).

Muitos engenheiros acreditam que a arquitetura é determinada pelos requisitos e por isso esperam que a fase de engenharia dos requisitos esteja finalizada para então iniciar a definição da arquitetura. Porém, apenas uma fração dos requisitos específicos do sistema tem influência na arquitetura.

A identificação dos requisitos que são significantes para a arquitetura pode ser respondida através de um framework conceitual desenvolvido especialmente para um domínio específico, uma vez que esta resposta é muito dependente do domínio.

Avançar para a fase de projeto ou mesmo iniciar a implementação do sistema não quer dizer que a definição da arquitetura esteja finalizada. Isto significa que o detalhamento obtido até então já é suficiente para prosseguir com o projeto de uma parte do sistema.

Parte de um Framework (Hotspots e frozenspots)

  Frozenspots

  • Partes fixas de um framework;
  • Também conhecidos como hook points;
  • Serviços já implementados pelo framework;
  • Normalmente realizam chamadas indiretas aos hotspots.

  Hotspots

  • Partes flexíveis de um framework;
  • Pontos extensíveis, necessitam de complementação;
  • Funcionalidades/serviços que devem ser implementado;
  • Partes nos quais os programadores que usam o framework adicionam o seu código para especificar uma funcionalidade de sua aplicação;
  • Hotspots são invocados pelo framework, ou seja, classes (implementadas pelo programador da aplicação) recebem mensagens de uma classe do framework (frozenspot).Isso geralmente é implementado através de herança e de métodos abstratos.

Framework em administração de empresas

Em administração, um framework é uma estrutura conceitual básica que permite o manuseio homogêneo de diferentes objetos de negócio. Serve para incrementar a disciplina de gestão e predefinir entregáveis comuns de e para cada objeto de negócio. Pode ser visto também como uma tática bem definida para manipular com destreza ambientes organizacionais complexos. Um framework dever prover sugestões de solução para uma família de problemas semelhantes. Exemplos de frameworks para gestão: ISO 9.000, ISO 14.000, OHSAS 18.000, ITIL, COBIT, CMM, HACCP.

 


Associação SoftwareLivre

A Associação SoftwareLivre.org (ASL) é uma associação civil sem fins-lucrativos, com sede em Porto Alegre/RS que reúne empresários, profissionais liberais, estudantes e servidores públicos, estabelecendo relações com os mais diversos setores da sociedade como o poder público, universidades, empresas, grupos de usuários, hackers e ONGs. A ASL tem por principal objetivo tornar o software livre amplamente incluído na sociedade, propiciando espaço de discussão, apoio, fomento e organização de iniciativas nas mais diversas áreas relacionadas. - Site oficial da associação