Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
-
Upload
adriano-teixeira-de-souza -
Category
Technology
-
view
2.101 -
download
2
Transcript of Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Prof. Adriano Teixeira de Souza
Biblioteca de Classes e Frameworks
“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
Classes instanciadas pelo cliente
Cliente chama funções
Não tem fluxo de controle pré-definido
Não tem interação pré-definida
Não tem comportamento default
Customização com subclasse ou composição
Chama funções da “aplicação”
Controla o fluxo de execução
Define interação entre objetos
Provê comportamento default
Biblioteca Framework
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
PHP
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