“Reusar” software não é simples
Maioria dos esforços resultam apenas
reutilização de pequenos componentes
Principais vantagens do uso de frameworks
◦ Aumento do reuso
◦ Diminuição do tempo para produção de família de
aplicações
Framework provê reutilização de
◦ Design
◦ Código
Reuso em larga escala
Prof. Adriano Teixeira de Souza
A primeira geração de OO situou-se sobre
bibliotecas de classes para empacotar objetos
para reutilização.
Uma abordagem mais promissora é usar um
framework de objetos.
Frameworks são bibliotecas de classes pré-
montadas que são empacotadas para provê
funcões específicas. Frameworks tornará mais
fácil montar aplicações com objetos.
Prof. Adriano Teixeira de Souza
Bibliotecas
◦ Conjunto de classes relacionadas
Funcionalidades de propósito geral
◦ Classes não relacionadas a um domínio de aplicação
específica
Em contrapartida às classes de um framework
Diferença
◦ Grau de reutilização
◦ Impacto na arquitetura da aplicação
Classe de uma biblioteca
◦ Reutilizada sozinha
Classe de um framework
◦ Reutilizada juntamente com as outras em uma
instanciação
Prof. Adriano Teixeira de Souza
Biblioteca Framework
Classes instanciadas pelo cliente Customização com subclasse ou
Cliente chama funções composição
Não tem fluxo de controle pré- Chama funções da “aplicação”
definido Controla o fluxo de execução
Não tem interação pré-definida Define interação entre objetos
Não tem comportamento default Provê comportamento default
Prof. Adriano Teixeira de Souza
“Um framework é um conjunto de classes que constituem
um design abstrato para soluções de uma família de
problemas.”
Johnson e Foote (1988)
“Um framework é um conjunto de objetos que colaboram
com o objetivo de cumprir um conjunto de
responsabilidades para uma aplicação ou um domínio de
um subsistema.”
Johnson (1991)
“Uma arquitetura desenvolvida com o objetivo de se obter
a máxima reutilização, representada como um conjunto de
classes abstratas e concretas, com grande potencial de
especialização.”
Mattsson (1996)
Reusável
◦ Propósito final
◦ Para ser reusável, deve primeiro ser usável
Bem documentado
Fácil de usar
Extensível
◦ Framework contém funcionalidade abstrata (sem
implementação) que deve ser completada
Seguro
◦ Desenvolvedor de aplicações não pode destruir o
framework
Eficiente
◦ Devido a seu uso em muitas situações, algumas das
quais poderão necessitar de eficiência
Um framework é uma estrutura de classes
interrelacionadas, que corresponde a uma
implementação incompleta para um conjunto de
aplicações de um domínio.
Esta estrutura de classes deve ser adaptada para a
geração de aplicações específicas.
A abordagem de frameworks orientados a objetos
produz uma descrição de um domínio para ser
reutilizada.
Um framework é um esqueleto de implementação de
uma aplicação ou de um subsistema de aplicação, em
um domínio de problema particular.
Prof. Adriano Teixeira de Souza
Frameworks não são simplesmente coleções de
classes. Ao contrário, são caracterizados com rica
funcionalidade e interconexões entre classes de
objetos, que provêem uma infraestrutura para o
desenvolvedor.
Uma classe abstrata é um projeto para um único
objeto. Um framework é o projeto de um conjunto
de objetos que colaboram para executar um
conjunto de responsabilidades.
Prof. Adriano Teixeira de Souza
Um framework é uitilizado através de
configuração ou conexão de classes
concretas e derivação de novas classes
concretas a partir das classes abstratas do
framework.
... não apenas classes, mas a forma como as
instâncias das classes colaboram ...
Prof. Adriano Teixeira de Souza
A diferença fundamental entre um framework
e a reutilização de classes de uma biblioteca.
◦ No caso de biblioteca de classes são usados artefatos
de software isolados, cabendo ao desenvolvedor
estabelecer sua interligação
◦ No caso do framework, é procedida a reutilização de
um conjunto de classes interrelacionadas.
Prof. Adriano Teixeira de Souza
Aplicação desenvolvida totalmente.
Aplicação desenvolvida reutilizando classes
de biblioteca.
Aplicação desenvolvida reutilizando um
framework.
Prof. Adriano Teixeira de Souza
Os frameworks fornecem infraestrutura de
projeto disponibilizada ao desenvolvedor da
aplicação, que reduz a quantidade de código a
ser desenvolvida, testada e depurada.
As interconexões preestabelecidas definem a
arquitetura da aplicação, liberando o
desenvolvedor desta responsabilidade.
O código escrito pelo desenvolvedor visa
estender ou particularizar o comportamento do
framework.
Prof. Adriano Teixeira de Souza
Um papel do framework é fornecer o fluxo do
controle da aplicação. Assim, em tempo de
execução as instâncias das classes
desenvolvidas esperam ser chamadas pelas
instâncias das classes do framework.
Prof. Adriano Teixeira de Souza
Um framework se destina a gerar diferentes
aplicações para um domínio. Precisa, então,
conter uma descrição dos conceitos deste
domínio.
As classes abstratas de um framework são os
repositórios dos conceitos gerais do domínio
de aplicação.
Prof. Adriano Teixeira de Souza
No contexto de um framework, um método
de uma classe abstrata pode ser deixado
propositalmente incompleto para que sua
definição seja acabada na geração de uma
aplicação.
Apenas os atributos a serem utilizados por
todas as aplicações de um domínio são
incluídos em classes abstratas.
Prof. Adriano Teixeira de Souza
Os frameworks invertem a ótica de reuso das
classes, da abordagem bottom-up para a
abordagem top-down:
◦ O desenvolvimento inicia com o entendimento do sistema
contido no projeto do framework, e segue no detalhamento
das particularidades da aplicação específica, o que é
definido pelo usuário do framework.
Assim, a implementação de uma aplicação a partir
do framework é feita pela adaptação de sua
estrutura de classes, fazendo com que esta inclua
as particularidades da aplicação.
Prof. Adriano Teixeira de Souza
Com o framework pronto, benefícios
◦ Redução de custos
◦ Redução de time-to-market
Motivos
◦ Maximização de re-uso (análise, design, código, testes)
Reutilização de design feito por outros pode transferir conhecimento e
experiência para o usuário do framework
◦ Desenvolvedores adicionam valor em vez de reinventar a roda
◦ Menos manutenção
Fatoração de aspectos comuns a várias aplicações
Uso de herança permite corrigir todas as aplicações com a troca de uma
classe-mãe
Cuidado com o "Fragile Base Class Problem” onde troca da classe-mãe
quebra as filhas
◦ Melhora do código (menos defeitos) devido ao uso em várias
aplicações
Prof. Adriano Teixeira de Souza
Outras vantagens
◦ Diminuição de linhas de código na aplicação
◦ Melhor consistência e compatibilidade entre aplicações
◦ Conhecimento sobre o domínio da aplicação é mantido
dentro da organização
◦ Alavancagem do conhecimento de especialistas
Framework oferece uma forma de empacotar o
conhecimento de especialistas sobre domínios de problemas
Assim, não se perde o conhecimento com a saída de
especialistas e o conhecimento pode ser usado/estudado
sem a presença do especialista
Resultado: criação de patrimônio estratégico da empresa
(Strategic Asset Building)
Prof. Adriano Teixeira de Souza
Construir um framework é complexo
◦ Re-uso não vem sozinho: deve ser planejado
◦ É mais complexo e demora mais fazer uma aplicação
tendo que construir um framework em vez de fazer a
aplicação do zero
Documentação é essencial para o usuário
(desenvolvedor) poder utilizar o framework
Dificuldade para manter compatibilidade com
versões anteriores
◦ Frameworks se tornam mais maduros com o passar do
tempo e as aplicações devem evoluir em paralelo
Flexibilidade e generalização do framework
podem trabalhar contra sua eficiência em
algumas aplicações
Prof. Adriano Teixeira de Souza
Benefícios são realizados em longo prazo
◦ Quem pode pensar em longo prazo quando se está
competindo "On Internet time"?
Poucas empresas
Uma empresa aeroespacial demorou anos para fazer
frameworks e começou a ter retorno na quarta missão
Precisa-se modificar o processo de
desenvolvimento e criar novos incentivos
Prof. Adriano Teixeira de Souza
Existem, literalmente, milhares de frameworks disponíveis para as
diversas linguagens de programação existentes. Diante desta
imensidão de “oferta”, é importante optar por um que atenda a suas
necessidades e que seja consoante a seu método e estilo de
trabalho. Inicialmente, pode parecer que usar um framework é pior
do que fazer uma “programação pura”.
Entretanto, tenha certeza:
vale a pena dedicar seu tempo nisso!
As vantagens vindouras de ter um projeto
bem estruturado e rodando numa plataforma
segura e estável compensam.
Prof. Adriano Teixeira de Souza
.NET
Microsoft .NET (conhecido por .NET Framework -
em inglês: dotNet) é uma iniciativa da empresa
Microsoft, que visa uma plataforma única para
desenvolvimento e execução de sistemas e
aplicações. Todo e qualquer código gerado para
.NET, pode ser executado em qualquer dispositivo que possua
um framework de tal plataforma.
A plataforma .NET é executada sobre uma Common Language
Runtime - CLR (Ambiente de Execução Independente de Linguagem)
interagindo com um Conjunto de Bibliotecas Unificadas (framework).
Esta CLR é capaz de executar, atualmente, mais de 20 diferentes
linguagens de programação, interagindo entre si como se fossem uma
única linguagem.
Prof. Adriano Teixeira de Souza
Java
◦ Struts (J2EE) - um dos frameworks mais usados em ambientes corporativos para
construção de aplicações web. Usa o modelo MVC e caracterizado por uma
camada de controle com uso de J2EE e XML.
◦ JavaServer Faces (J2EE) - baseado em tecnologia de servlets e JSP, pode ser
usado como uma opção ao Struts.
◦ Spring - framework baseado em orientação a aspectos. Possibilidade de uso em
conjuntos com outros frameworks MVC, como o Struts e JSF.
◦ Hibernate (Persistência de Dados) - conhecido framework de persistência de
dados, que usa conceitos de banco de dados, além do mapeamento objeto-
relacional (classes Java para tabelas de databases).
Prof. Adriano Teixeira de Souza
Java
◦ JUnit (testes) - talvez o mais usado framework Java, incluído em IDEs free ou
comerciais. Para testes unitários em geral.
◦ Log4J (log) - amplamente usado e útli para geração de logs.
◦ Jakarta commons-log (log) - semelhante ao Log4J, sob o selo da Jakarta.
◦ Ant (build e deploy) - framework também amplamente divulgado da Jakarta
para automatização de processos de construção, além de testes e distribuição.
◦ Jasper Report / iReport (geradores de relatório) - framework para geração de
modo dinâmico de relatórios. Compatível com formatos xml, pdf e html.
Prof. Adriano Teixeira de Souza
PHP
◦ CakePHP – Um dos Frameworks de PHP mais utilizado. É um
framework de desenvolvimento rápido para PHP que fornece
uma arquitetura extensível para desenvolvimento, manutenção,
e distribuição de aplicações. Usando design patterns
conhecidos como MVC e ORM com convenção sobre o
paradigma da configuração, reduz o custo do desenvolvimento
e ajuda os desenvolvedores a escreverem menos código.
◦ Symfony - Destina-se a acelerar a criação e manutenção de
aplicações web, e para substituir as tarefas repetitivas de
codificação. É fácil de instalar em qualquer configuração e é
compatível com quase todos os sistemas de banco de dados.
Prof. Adriano Teixeira de Souza
PHP
◦ Zend – É um dos frameworks PHP mais utilizados. É baseado na
simplicidade, nas melhores praticas orientadas a objeto,
licenciamento corporativo amigável, e uma base de código ágil
rigorosamente testada. Zend Framework é focado na
construção de mais seguras, confiáveis e modernas aplicações
de serviços web, e APIs de fornecedores líderes como Google,
Amazon, Yahoo, Flickr.
◦ Zoop - É estável, escalável e portátil. O Zoop é projetado para
ser rápido, eficiente e limpo. É facilmente extensível e você
optar por incluir apenas a funcionalidade que você usa.
Prof. Adriano Teixeira de Souza
Python - Mais populares Frameworks de
pilha completa
◦ Django - Framework para perfeccionistas, traz facilidades para
construir melhores aplicativos Web mais rapidamente e com menos
código. Ele encoraja o desenvolvimento rápido e limpo, com um design
prático.
◦ Pylons – Framework leve que enfatiza a flexibilidade e o
desenvolvimento rápido. Recentemente foi colocado em estado de
manutenção com o lançamento do Pyramid, o seu sucessor.
◦ TurboGears – Combina SQLAlchemy(Model), Genshi(View),
Pylons(Controller), Repoze e Tosca Widgets. Oferece um
desenvolvimento rápido, com modelos de design amigáveis, um
poderoso e flexível mapeamento relacionado a objetos (ORM).
Prof. Adriano Teixeira de Souza
Python
◦ web2py – De fácil uso, com tudo em um pacote sem
dependências adicionais. Não tem arquivos de configuração, não
requer instalação e pode ser rodado de uma unidade USB. Usa
Python para MVC.
◦ Zope – Conhecido como o avô dos Frameworks de Python para
Web, ele tem crescido em uma família de frameworks ao longo
dos anos. A primeira versão foi lançada em 1999.
◦ Outros Frameworks de pilha completa
CubicWeb, Enamel, GAE framework, Glashammer, Karringell, Nagare,
notmm, Porcupine, QP, SkunkWeb, Spyce, Tipfy, Tornado, WebCore,
web.py, Webware, Werkzeug, WHIFF, XPRESS.
◦ Frameworks básicos
AppWsgi, Bobo, Bottle, CherryPy, circuits.web, Python Paste, PyWebLib,
WebStack. Albatross, Aquarium, Divmod Nevow, Flask, JOTWeb2,
Python Servlet Engine, Pyramid, Repoze.bfg, Quixote, Spiked.
Prof. Adriano Teixeira de Souza
Ruby
◦ Ruby on Rails – Mais conhecido framework da linguagem ruby para
desenvolvimento Web. É um projeto de código aberto e as aplicações
criadas utilizando o framework Rails são desenvolvidas com base no
padrão de projeto MVC. Ruby on Rails foi uma extração de um projeto
de David Heinemeier Hansson, o gerenciador de projetos Basecamp.
Foi lançado a público pela primeira vez em julho de 2004. O Rails é
um "meta-framework", uma vez que é uma junção de cinco
frameworks: Active Record, Action Pack, Action Mailer, Active Support
e Action Webservices.
◦ Padrino - O Padrino é um framework Ruby construído baseado no
Sinatra. O Sinatra é uma DSL para agilizar a criação de aplicações web
simples. Padrino foi desenvolvido para tornar mais fácil e divertido o
código de aplicações web mais avançadas. São muitas as
funcionalidades adicionais que o Padrino traz em relação ao Sinatra,
como os helpers, geradores, mailer, seção administrativa, login, etc.
Prof. Adriano Teixeira de Souza
Ruby
◦ Cramp - Este é um framework web assíncrono orientado à eventos, baseado na
biblioteca EventMachine. Nas palavras do próprio autor do framework (Pratik
Naik), o Cramp não serve para a maioria das aplicações web que vemos por aí.
O Cramp foi desenvolvido para fazer I/O disparado por eventos com maior
segurança e desempenho – ideal para situações onde é necessário gerenciar
uma grande quantidade de conexões abertas (APIs de streaming, por exemplo).
◦ Rango - O Rango é um framework web baseado em Rack, inspirado no Django.
Leve e customizável, seu objetivo é ser mais robusto que Sinatra, porém menor
que Rails e Merb. Para isso, foi feito de forma modular, permitindo que o
desenvolvedor escolha seus componentes.
◦ Merb - Esse é um dos frameworks mais famosos para Ruby, e seu diferencial
está na flexibilidade. O Merb permite que você escolha “monte” o framework,
escolhendo o seu ORM, sua biblioteca de JavaScript e a linguagem dos
templates através de plugins. Oferece uma série de funcionalidades, como
ferramenta de testes e correio, monitor de exceções, e geradores. Baseado no
padrão MVC.
Prof. Adriano Teixeira de Souza