Padrões e Frameworks
Apresentação do curso
Roberto A. Bittencourt Professor Adjunto - UEFS
Equipe
Roberto Almeida Bittencourt (professor)
roberto@ecomp.uefs.br (para questões ligadas à
disciplina)
roberto@uefs.br
Jairo Henrique Calmon (estágio docente)
Conteúdo Programático
Padrões de Projeto Arquiteturais Criacionais Estruturais Comportamentais Frameworks Visão geral Frameworks de persistência Frameworks de interface Refatoração Bad smells Catálogo de refatorações Suporte ferramentalObjetivo geral
Ser capaz de projetar sistemas de software
através do uso de padrões de projeto,
frameworks e técnicas de refatoração,
embasando-se num referencial teórico e no
estado-da-prática da área de engenharia de
Objetivos específicos
Conhecer, compreender e aplicar alguns dos padrões de
projeto de software mais conhecidos;
Conhecer, compreender e aplicar frameworks para o
projeto de software baseado em reuso, em especial frameworks de interface e de persistência;
Projetar, desenvolver e testar um sistema de software
em um domínio específico através da utilização adequada de padrões de projeto;
Projetar, desenvolver e testar um sistema de informação
baseado em frameworks de interface e de persistência, utilizando tecnologias do estado-da-prática;
Conhecer, compreender e aplicar padrões de refatoração
Metodologia
Aulas de discussões de padrões de projeto
Demanda leitura prévia
Tutoriais PBL para discussão dos projetos Tutoriais de ferramentas e tecnologias
Avaliação
Trabalhos em equipe (70%)
3 projetos
Participação nas discussões nas aulas e
Projetos
Projeto1: Desenvolvimento de jogo em Java
estilo Atari com aplicação de padrões de projeto
Projeto 2: Desenvolvimento de um sistema
de informação (camada de modelo e persistência)
Projeto 3: Continuação do desenvolvimento
de um sistema de informação (visões e controladores)
Bibliografia (livros-texto)
GAMMA, E. et al. Padrões de projeto:
soluções reutilizáveis de software orientado a objetos. Porto Alegre: Bookman, 2005.
FREEMAN, E. et al. Use a Cabeça! Padrões de Projetos (Design Patterns). Alta Books,
2007.
FAYAD, et al. Building Application
Frameworks : Object-Oriented Foundations
of Framework Design. John Wiley & Sons, 1999.
FOWLER, M et al. Refatoração:
aperfeiçoando o projeto de código existente. Porto Alegre: Bookman, 2004.
Bibliografia (Leitura Complementar)
SHALLOWAY, A. & TROTT, J. R. Explicando padrões de projeto:
uma nova perspectiva em projeto orientado a objeto. Porto Alegre: Bookman, 2004.
LARMAN, C. Utilizando UML e Patterns: Uma Introdução à
Análise e ao Projeto Orientados a Objetos. 3. ed. Bookman, 2007.
FOWLER, M. Patterns of Enterprise Application Architecture.
Addison Wesley, 2003.
ECKEL, B. Thinking in Patterns with Java. 1a. ed. MindView,
2003.
MASSOL, V. & HUSTED, T. JUnit em Ação. Ciência Moderna, 2005. PILONE, D. & PITMAN, N. UML 2.0 in a Nutshell. O'Reilly &
Associates, 2005.
BROWN, W. AntiPatterns: Refactoring Software, Architectures,
and Projects in Crisis. John Wiley & Sons, 1998.
Detalhes adicionais
Site do curso: https://sites.google.com/site/ecomppadroes20141/ Lista de discussão: ecomp-padroes-20141@googlegroups.com https://groups.google.com/forum/#!forum/ecomp-padroes-20141 Cronograma do curso: https://sites.google.com/site/ecomppadroes20141/ cronogramaO que são padrões (patterns)? (1)
Princípios e soluções codificadas em um
formato estruturado descrevendo um problema e uma solução
Um par nomeado problema/solução que pode
ser aplicado em novos contextos
É o conselho de projetistas experientes para
O que são padrões (patterns)? (2)
A ideia por trás de padrões de design é simples:
Escreva e catalogue interações comuns entre objetos que programadores
acharam frequentemente úteis.
Resultado:
Facilitar o reuso de código orientado a objetos entre projetos e entre
Características de um bom padrão
Resolve um problema
É um conceito provado
A solução não é óbvia
Descreve um relacionamento
O padrão tem um componente humano
Tipos de padrões
Padrões arquiteturais
Expressa uma organização ou esquema estrutural fundamental para sistemas de software.
Padrões de projeto (Design Patterns)
Proveem um esquema para refinar os
subsistemas ou componentes de um sistema de software, ou as relações entre eles.
Expressões idiomáticas (Idioms)
Uma expressão idiomática descreve como implementar aspectos específicos de
componentes ou das relações entre eles usando as características de uma dada linguagem.
Descrevendo padrões
Nome: O padrão deve ter um nome significativo. Problema: Uma descrição do problema.
Contexto: Explica a aplicabilidade do padrão. Forças: Uma descrição das forças relevantes e
restrições e como elas interagem/conflitam entre si.
Solução: Relações estáticas e regras dinâmicas
descrevendo como implementar o resultado desejado.
Consequências: Implicações (boas e ruins) do
uso da solução.
Exemplos: Uma ou mais amostras de aplicações
Qual é o problema?
Programar é difícil
Onde está a maior dificuldade?
"Interface design and functional factoring constitute
the key intelectual content of software and is far more difficult to create or re-create than code" (Peter
Deutsch)
Mas nossos programadores são mortais
"It shouldn't take a good programmer to build a good
program"
Solução: Temos que fornecer formas de reuso que
vão além de código: reuso de análise, design, código.
O que é um Framework? (1)
Um framework captura a funcionalidade
comum a várias aplicações
As aplicações devem ter algo razoavelmente
grande em comum: pertencem a um mesmo domínio de problema
O que é um Framework? (2)
A definição que usamos foca quatro características
principais de um framework (Orientado a Objeto):
"Um framework provê uma solução para uma família de problemas semelhantes, ...
Usando um conjunto de classes e interfaces que mostra como decompor a família de problemas, ...
E como objetos dessas classes colaboram para cumprir suas responsabilidades, ...
O conjunto de classes deve ser flexível e extensível para permitir a construção de várias aplicações com pouco esforço, especificando apenas as particularidades de cada aplicação"
Observe que um framework é uma aplicação quase
completa, mas com pedaços faltando
Ao receber um framework, seu trabalho consiste em prover os pedaços que são específicos para sua aplicação
Exemplos de Frameworks
Para testes de unidade: JUnit, unittest,
PHPUnit, etc.
Para aplicações web: Struts, Spring, Zend,
CakePHP, Hibernate, Rails, Django, .NET, J2EE, JQuery, GWT, Bootstrap
Para aplicações desktop: GNOME, KDE, Java
Swing, Java SWT, Cocoa, etc.
Para análise de redes sociais: JUNG, Gephi,
Prefuse, etc.
Para domínios específicos: aplicações
Code smells (maus cheiros no código)
Um code smell é uma indicação superficial
que geralmente corresponde a problemas mais profundos no sistema.
Exemplos:
Duplicação de código Método longo
Lista de parâmetros longa
Code smells geralmente oferecem
oportunidades de refatoração
O que é refatoração?
Refatoração muda a estrutura do software
mas não muda a funcionalidade do programa
Refatoração consiste em transformações que
preservam comportamento
Fowler: Refactoring (livro, web site)
Catálogo de refatorações
Formato de uma refatoração no catálogo de
Fowler: Nome Resumo Motivação Mecânica Exemplos
Exemplos de refatoração
27
Renomear uma entidade
Encapsular parte do código como uma
função/método
inverso: expandir uma função/método no lugar de
uma chamada
Mover um método membro de uma classe
para outra
Mesclar e dividir classes