04 - Frameworks

Revisão de 10h38min de 19 de abril de 2012 por Lclaudio (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

A - Definição: O que faz este software?


Há várias definições sobre o que é um framework. Dentre as pesquisadas, escolhemos duas que nos dão uma boa ideia sobre o que é e o que faz esta tecnologia. Para Fayad et al (1999b) e Johnson & Foote (1988), “um framework é um conjunto de classes que constitui um projeto abstrato para a solução de uma família de problemas”.


Já segundo Buschmann et al. (1996), Pree (1995) e Pinto (2000) um framework é definido como “um software parcialmente completo projetado para ser instanciado. O framework define uma arquitetura para uma família de subsistemas e oferece os construtores básicos para criá-los. Também são explicitados os lugares ou pontos de extensão (hot-spots) nos quais adaptações do código para um funcionamento específico de certos módulos devem ser feitas”.


Em termos práticos, pode-se dizer que um framework captura a funcionalidade comum a várias aplicações que possuem algo razoavelmente grande em comum, provendo uma solução para uma família de problemas semelhantes. Ou seja, é um software quase completo que pode ser usado para o desenvolvimento de outros softwares, ficando o programador com a responsabilidade de desenvolver as funções específicas que faltam para sua aplicação.


B - Funcionalidades: Que serviços ele disponibiliza?


Um framework serve como uma base, uma estrutura sobre a qual você desenvolve suas aplicações, oferecendo todo o suporte e infraestrutura necessários para as funções essenciais de qualquer aplicativo. Por exemplo, todo sistema precisa de telas de cadastro, acesso a bancos de dados, controle de sessões autenticadas, manipulação de arquivos físicos no servidor, etc. O framework já tem tudo isso pronto e testado, funcionando e otimizado para o máximo desempenho. Um framework dita os padrões de codificação, cada coisa em sua pasta, cada arquivo com seu padrão de nomenclatura.

Existem diversos frameworks disponíveis para as mais variadas linguagens de programação, onde cada um disponibiliza diferentes serviços. Escolhemos três para exemplificar suas funcionalidades:

• Zend Framework: inclui diferentes componentes desenvolvidos em PHP5 para prover alta qualidade para desenvolvimento de aplicações web e web services. O Zend Framework segue o padrão MVC (Model View Controller ou Modelo-Visão-Controlador) que é um padrão de arquitetura de aplicações que visa separar a lógica da aplicação (Model), da interface do Usuário (View) e do fluxo da aplicação (Controller). Permite que a mesma lógica de negócios possa ser acessada e visualizada por várias interfaces. Alguns componentes do Zend são: • Zend_Controller e Zend_View : Zend_Controller fornece os alicerces para a construção de websites baseados no MVC. Zend_View separa o script de visualização dos controladores e modelos. • Zend_Config: Simplifica o uso de dados de configuração para aplicações web. • Zend_Db : Componente que provê acesso a banco de dados. Adicionalmente, ele ajuda a proteger suas consultas contra ataques de SQL Injection.

• Symfony: é um framework escrito em PHP que segue o paradigma MVC projetado para otimizar o desenvolvimento de aplicações web através de várias características, tais como separar um aplicativo web das regras do negócio, lógica e apresentação. Ele contém diversas ferramentas e classes que visam reduzir o tempo de desenvolvimento de uma complexa aplicação web. Além disso, ele automatiza tarefas comuns, para que o desenvolvedor possa se concentrar inteiramente nas especificidades da aplicação. Algumas das funcionalidades disponíveis no Symfony são: • Automatização para trabalhar com formulários, validação e repovoamento; • Camada de internacionalização que permite a tradução dos dados e da interface, bem como conteúdo (localization); • Camada de apresentação que utiliza templates e layouts que podem ser construídos pelos designers HTML sem qualquer conhecimento do framework; • Protege a aplicação contra ataques via dados corrompidos.

• Struts: é um framework criado em Java que auxilia a criação de aplicações para a Web. O papel desempenhado pelo Struts nas aplicações web é o de fornecimento de toda a estrutura primária inicial, implementando o controlador para a aplicação, sendo responsável pela parte de comunicação e pela integração entre as camadas de visualização.


C - Benefícios: O que ele facilita no dia a dia?


São vários os benefícios do uso de frameworks. Dentre eles. Podemos citar:

• Redução de custos; • Reusabilidade; • Extensibilidade; • Segurança; • Economia de tempo; • Inversão de controle.

No desenvolvimento de um aplicativo usando um framework economiza-se tempo, pois o processo não começa do zero, aumentando a produtividade dos desenvolvedores, a qualidade e a confiabilidade do produto final, já que as funcionalidades do framework são testadas em várias instâncias, diminuindo as chances de ocorrência de erros em seu uso no aplicativo. Os frameworks também oferecem pontos de extensão que possibilitam aos desenvolvedores estenderem suas funcionalidades para gerar uma aplicação e incentivam o reuso, pois capturam os conhecimentos de especialistas sobre domínios de problemas.Tudo isto leva a uma redução de custos.


Alguns frameworks ainda apresentam inversão de controle, que simplifica o desenvolvimento da aplicação. Inversão de controle também é conhecido como Hollywood Principle ("Don't call us, we'll call you"). O controle da execução da aplicação é transferido para o framework, que controla quais métodos da aplicação e em que contexto eles serão chamados em decorrência de eventos.


Um framework racionaliza o desenvolvimento de muitos padrões empregados para um determinado fim, acrescenta estrutura ao código, levando o programador a escrever melhor, mais legível e um código mais sustentável. Em última análise um framework torna a programação mais fácil, uma vez que transforma um pacote de complexas operações em simples afirmações.


D- Interface gráfica: Um exemplo (print) de uma tela?

Software-framework WPF (Windows Presentation Foundation). O framework é representado pelo comando button1_Click. Após o clique do usuário no botão, o framework chama o comando. O framework passa então a definir quase toda aplicação executável; uma mais específica é definida pela classe Window1.




Software-framework de desenvolvimento Eclipse.



E - Fornecedor: Quem fornece (quem criou) este software?


Os frameworks são escritos em quase todas as plataformas como PHP, Java, C++, ECMAScript, Perl, Python, Ruby e outras. Sobre o primeiro framework desenvolvido, alguns alegam ter sido o Drupal em 2001 e outros preferem considerar o CakePHP em 2005. Nesse período, vários frameworks foram criados livremente por programadores, o que não obteve muito êxito por não serem nenhum pouco simples e de fácil compreensão; não foram considerados material programável, algo "resolvido" com a chegada dos frameworks na linguagem PHP. De fato não se atribui a criação dos frameworks a uma pessoa só - resultado da filosofia open-source adotada quase sempre pela comunidade de programadores. Os frameworks são fornecidos por grandes grupos como Cake Software Foundation, Red Hat, Inc., Django Software Foundation e outros após serem patentiados por uma entidade de licenciamento de softwares como as empresas Apache License e Mozilla Public License ou ainda uma universidades, como o Instituto de Tecnologia de Massachusetts.


F - Estado da Arte: Exemplos atuais


Hoje em dia existem milhões de frameworks. Os mais utilizados são os web-application frameworks (utilizados para suportar o desenvolvimento de sites web dinâmicos, aplicações web e serviços). Você chegará a nomes como CakePHP, Ruby on Rails, Zend Framework, CodeIgniter, Symfony, Struts e muitos, caso procurar pelos mais utilizados. Pegando como exemplo o Ruby on Rails desenvolvido na linguagem Ruby, estima-se que é utilizado em mais de 325.000 websites [1] como blogs pessoais e de também de empresas relevantes como Github, Scribd, Groupon, e Basecamp. O CakePHP periodicamente divulga quais sites o utilizam em algumas de sua aplicações, como exemplo: os sites das universidades americanas Yale, Brigham Young University, do jornal britânico Daily Express e do próprio Mozilla[2].


G - Bibliografia: Livros, artigos ou sites consultados

  1. http://www2.dbd.puc-rio.br/pergamum/tesesabertas/0410823_06_cap_02.pdf
  2. http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/frame/oque.htm
  3. http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/
  4. http://codigofonte.uol.com.br/artigo/php/introducao-ao-symfony
  5. http://coisasdoperim.wordpress.com/
  6. http://www.forumweb.com.br/artigo/143/zend-framework/o-que-e-o-zend-framework
  7. http://www.linhadecodigo.com.br/artigo/1045/java-struts-na-pratica-de-ponta-a-ponta.aspx
  8. http://info.cimetrix.com/blog/bid/22339/What-is-a-Software-Framework-And-why-should-you-like-em
  9. http://www.ibm.com/developerworks/linux/library/wa-rubyonrails/?ca=dgr-lnxw01RubyAndJ2EE
  10. http://stackoverflow.com/questions/148747/what-is-the-difference-between-a-framework-and-a-library
  11. http://book.cakephp.org/1.2/view/510/Sites-in-the-wild
  12. http://ricardomartins.net.br/tecnologia/framework-php-mais-utilizado/
  13. http://blog.webspecies.co.uk/2011-05-23/the-new-era-of-php-frameworks.html
  14. http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
  15. http://en.wikipedia.org/wiki/Ruby_on_Rails
  16. http://en.wikipedia.org/wiki/CakePHP
  17. http://en.wikipedia.org/wiki/Zend_Framework