eliane martins - instituto de computação - unicamp melhoria da manutenibilidade criado: set/2005...
TRANSCRIPT
![Page 1: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/1.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Melhoria da Manutenibilidade
Criado: Set/2005Atualizado: Nov/2010
![Page 2: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/2.jpg)
Eliane Martins - Instituto de Computação - UNICAMP 2
Tópicos
• Manutenibilidade
• Técnicas para melhoria da manutenibilidade
• Métricas
![Page 3: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/3.jpg)
Eliane Martins - Instituto de Computação - UNICAMP 3
Referências
CHIOSSI, T.S. “Técnicas de Desenvolvimento para a Manutenibilidade”. Cap2 do livro
sobre Manutenção de Software, em andamento.
DESCHAMPS, F. “Padrões de Projeto. Uma Introdução”. Notas de Aula. Departamento
de Automação e Sistemas (DAS). Universidade Federal de Santa Catarina.
KON, F. “Padrões de Projeto de Software Orientado a Objetos”. Notas de Aula.
IME/USP, 2005. URL: www.ime.usp.br/~kon/MAC5714/2005/aulas/slides/GoF.ppt
JANDL, P. Jr. “Uma Introdução aos Padrões de Projeto com Java”. 2003. Obtido na Internet em ago/2005.
PRESSMAN, R.S. “Sw Engineering: a Practitioner’s Approach”. McGraw-Hill, 3ª ed, 1992.
SOMMERVILLE, I.. “Sw Engineering”, 6ª ed, 2001, cap27.
GAMMA, E., HELM, R., JOHNSON, R., VLISSIDES, J. "Design Patterns: Elements of
Reusable Object-Oriented Software". Reading, MA: Addison Wesley, 1995.
![Page 4: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/4.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Manutenibilidade
• Algumas definições– Facilidade com que um sistema ou componente de software
pode ser modificado para se corrigir falhas, melhorar desempenho (ou outros atributos), ou ser adaptado a mudanças no ambiente; (IEEE 610.12, 1990)
– Facilidade para corrigir um sw, quando possui falhas ou deficiências, e também para expandir ou contrair o sw para satisfazer a novos requisitos (Martin e McClure 1983)
– Conjunto de atributos relativos ao esforço necessário para se realizar modificações em um sw (ISO/IEC 8402 1986)
![Page 5: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/5.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Considerações
• Todos os sistemas são igualmente fáceis de manter ? Porque não ?– Sistemas não são desenvolvidos visando manutenibilidade
– manutenibilidade deve ser uma das metas do desenvolvimento
• Que critérios usar para determinar se um sw é fácil de manter ou não ?
• É possível estimar o grau de manutenibilidade de um sw ?
![Page 6: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/6.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Como determinar se o sw é ou não fácil de manter?
• Manutenibilidade é uma característica que deve ser considerada ao longo de todo o desenvolvimento. Isso se deve ao fato de que alguns fatores relacionados ao desenvolvimento a influenciam [PRESSMAN 92; SOMMERVILLE 01]:
– Modularidade– Linguagem de programação– Estilo de programação– Verificação e Validação (V&V)– Disponibilidade dos testes– Depurador (debugger)– Documentação– Controle de Configuração
![Page 7: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/7.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores de influência
• Modularidade– Quanto melhor a estruturação do sistema, isto é, quanto mais
independentes forem os módulos que o compõem, mais fácil fica modificar um componente sem afetar todos os outros.
• Linguagem de programação– programas escritos em linguagem de alto nível são geralmente
mais fáceis de entender, e conseqüentemente, de manter. O uso linguagens padronizadas também é útil.
• Estilo de programação– a forma como um programa é escrito (uso de comentários, escolha
de nomes mnemônicos para variáveis e constantes, uso de indentação, entre outros) contribui para a sua inteligibilidade, e conseqüentemente, para a facilidade em mantê-lo.
![Page 8: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/8.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores de influência
• Verificação e Validação (V&V)– em geral, quanto maior o esforço com V&V, menor o número de
falhas residuais no sistema, diminuindo assim a necessidade de manutenções corretivas
• Disponibilidade dos testes– a aplicação de testes de regressão é necessária a cada modificação
do sistema. A disponibilidade dos testes aplicados facilita a geração dos testes na fase de manutenção.
• Depurador (debugger)– a existência de ferramentas de auxílio à depuração (“debugging”)
de programas facilita o diagnóstico das falhas encontradas.
![Page 9: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/9.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores de influência
• Documentação – quanto mais a documentação é clara, completa e atualizada, mais
fácil se torna entender o sistema. O uso de uma padronização para a documentação facilita a criação e manutenção da mesma.
• 47% - 62% é a % de esforço requerido para a compreensão de programas e documentos [Pigosrki 1996]
• Controle de Configuração– um dos aspectos importantes na manutenção é o controle de todos
os produtos que foram gerados durante o processo de construção do sistema.
![Page 10: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/10.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores externos
• Além dos fatores internos, relativos à forma como o sw é desenvolvido, fatores externos também influenciam na manutenibilidade:– Equipe
– Domínio da aplicação
– Idade do sistema
– Dependência do ambiente externo
– Estabilidade do hw
– Disponibilidade de ferramentas de desenvolvimento
![Page 11: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/11.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores externos
• Equipe– idealmente a manutenção de um sistema seria realizada pela equipe
que o desenvolveu. Se tal não é possível, recomenda-se que a equipe de manutenção acompanhe o processo de desenvolvimento.
• Domínio da aplicação– se o domínio da aplicação é conhecido e pode ser facilmente
compreendido e definido, os requisitos em geral são completos e estáveis, e com isso a necessidade de manutenção perfectiva diminui. Em domínios mais complexos, ou não muito conhecidos, a tendência é que os requisitos mudem com mais freqüência, e com isso a manutenção preventiva é mais necessária.
• Métodos evolutivos (ex.: métodos ágeis) a manutenção preventiva é intrínseca ao desenvolvimento
![Page 12: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/12.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores externos
• Idade do sistema– quanto mais velho um sistema, mais modificações ele sofreu ao
longo do tempo, e, portanto, mais complexo ele se torna. A manutenção preventiva (reengenharia) tem por objetivo melhorar a sua manutenibilidade.
• Dependência do ambiente externo– se um sistema é muito dependente do ambiente externo ele precisa
ser alterado a cada mudança nesse ambiente.
![Page 13: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/13.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Fatores externos
• Estabilidade do hw– geralmente são necessárias modificações para adaptar o software a
uma nova plataforma.
• Disponibilidade de ferramentas de desenvolvimento– as ferramentas CASE evoluem ou podem sair do mercado. É útil
guardar versões das ferramentas usadas para desenvolver o sistema. A manutenção se torna mais fácil, pois pode-se atualizar diagramas e documentos de Análise/Projeto, modificar código fonte escrito em linguagens que caíram em desuso, atualizar os testes, entre outros. A implicação disto é que às vezes o hw em que a ferramenta roda
precisa ser preservado!
![Page 14: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/14.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Manutenibilidade
• Como medir ?
• Como conseguir ao longo do desenvolvimento?
![Page 15: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/15.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Técnicas de desenvolvimento manutenibilidade
• Muitos métodos são utilizados durante as diferentes etapas do desenvolvimento de software com o objetivo de garantir qualidade. Alguns exemplos:– Reutilização de software
– Uso de mecanismos de separação de interesses:• reflexão computacional
• orientação a aspectos
![Page 16: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/16.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
• “Qualquer procedimento que produza (ou ajude a produzir) um sistema tornando a utilizar algo desenvolvido previamente”
[Peter Freeman 1987, citado em Pressman95, cap.26]]
• Reutilização é algo praticado há muito tempo em Engenharia de Software, só que de maneira ad hoc
• Dada a pressão por produzir sw de boa qualidade em pouco tempo necessidade de reutilizar de forma sistemática
Reutilização em Engenharia de Software
![Page 17: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/17.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
• Reutilização pode ser considerada em todas as fases do desenvolvimento
• Pode-se reutilizar:– Artefatos intermediários padrões de software
– Sistemas de aplicação
– Componentes
– Classes
– Funções
Níveis de Abstração
![Page 18: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/18.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões
• Padrão, s.m.[do latim patronu, protetor]1. Modelo oficial de pesos e medidas. 2. Aquilo que serve de base ou
norma para a avaliação de qualidade ou quantidade. 3. Qualquer objeto que serve de modelo à feitura de outro. ...
[FERREIRA, Aurélio B. H. “Novo Dicionário da Língua Portuguesa”. Rio de Janeiro, RJ: Nova Fronteira, 2ª edição, 1986.]
![Page 19: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/19.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de software
• Porquê– Aumentar a possibilidade de reuso de boas soluções para problemas
freqüentes, garantindo, com isso, melhor qualidade para o software
– Reutilizar soluções para problemas surgidos em trabalhos anteriores é uma tendência entre especialistas
– Os padrões surgem com a experiência prática
Experiência de especialistas pode ser compartilhada com novatos
![Page 20: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/20.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Uma definição
• “Um padrão descreve um problema que ocorre repetidamente no nosso ambiente, descrevendo a essência de uma solução para este problema, de forma que pode-se usar esta solução milhares de vezes, sem fazê-lo da mesma forma duas vezes.”
[ALEXANDER, Christopher, 1977 --> propôs padrões a serem usados em Arquitetura, de onde surgiu a idéia de utilizar do mesmo recurso em software]
[ALEXANDER, C., ISHIKAWA, S., SILVERSTEIN, M., JACOBSON, M., FIKSDAHL-KING,
I., ANGEL, S. "A Pattern Language". New York, NY (USA): Oxford University Press, 1977].
![Page 21: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/21.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Outra definição
• “Um padrão de software nomeia, motiva e explica uma solução genérica a um problema recorrente que surge em uma situção específica. Ele descreve o problema, a solução, quando é aplicável e quais as conseqüências de seu uso.” [Gamma et al]
![Page 22: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/22.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Características [Jandl 2003]
• Descrevem e justificam soluções para problemas concretos
e bem definidos.
• Documentam a experiência existente e comprovada.
• Fornecem um vocabulário comum aos desenvolvedores de
software.
• Descrevem relações entre conceitos, estruturas e mecanismos existentes nos sistemas.
• Podem ser utilizados em conjunto com outros padrões.
![Page 23: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/23.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Uso de padrões
• Padrões podem ser utilizados nas diversas etapas de desenvolvimento de software:– Análise (M.Fowler 1997)
– Arquitetura, Projeto e Codificação (Gamma e al; Buschmann 1996.)
– Testes (R.Binder 1999)
– Manutenção (Barry 2003; Hammouda 2004)
– Reengenharia (Demeyer 2003)
...
![Page 24: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/24.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de Arquitetura
• Representam esquemas para estruturar o software. Definem conjunto de subsistemas pré-definidos, especificam suas responsabilidade e as regras para organizar os relacionamentos entre eles.
– Ex.: Modelo em camadas
– Ex.: padrões IBM para e-business (www128.ibm.com/developerworks/patterns/)
Apresentação
Controle do Negócio
Dados
Entradas do usuárioExibição de resultados na tela
Lógica do negócio
Comunicação com serviços: conexão com banco de dados, troca de mensagens, controle de transações, ...
![Page 25: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/25.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de Projeto e Idiomas
• Padrões de Projeto– Permitem refinar os subsistemas da arquitetura, ou os
relacionamentos entre eles– Focam em aspectos típicos de projeto, tais como: interface-usuário,
criação de objetos, entre outros– São os mais comuns na literatura
• Idiomas– São padrões de baixo nível, específicos para linguagens de
programação– Descrevem como implementar aspectos dos subsistemas ou dos
relacionamentos entre eles, usando características de uma determinada linguagem de programação
![Page 26: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/26.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Outros padrões
• Padrões de análise– Fazem parte da Especificação de Requisitos ou da Modelagem Conceitual– Definem conjunto de objetos do mundo real, seus relacionamentos e as
regras que definem seu comportamento– São dependentes da aplicação pois descrevem aspectos específicos do
domínio do problema
• Padrões de manutenção– Regras e restrições que devem ser satisfeitas por entidades de um programa
(classes, métodos e atributos) para facilitar a manutenção, mais especificamente, a documentação (HAMMOUDA 2004)
• Padrões para reengenharia– padrões para refatoração
• Padrões de teste– Definem procedimentos, modelos de falhas, entre outros, para descrever
métodos de testes (Binder 2000)
![Page 27: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/27.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Gang of Four (GoF)
• E. Gamma and R. Helm and R. Johnson and J. Vlissides. Design Patterns - Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
• Existem diversas formas de descrever um padrão. Para os padrões de projeto a forma mais comum é aquela descrita no livro de Gamma et al, denominado Gang of Four (GoF):
[Kon2005]
![Page 28: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/28.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
O Formato dos padrões no GoF
– Nome (inclui número da página)• um bom nome é essencial para que o padrão caia na boca do povo
– Objetivo / Intenção ou Motivação• um cenário mostrando o problema e a necessidade da solução
– Aplicabilidade• como reconhecer as situações nas quais o padrão é aplicável
– Estrutura• uma representação gráfica da estrutura de classes do padrão
– Participantes• as classes e objetos que participam e quais são suas responsabilidades
– Colaborações• como os participantes colaboram para exercer as suas responsabilidades
[Kon2005]
![Page 29: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/29.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
O Formato dos padrões no GoF
– Conseqüências• vantagens e desvantagens, trade-offs
– Implementação• com quais detalhes devemos nos preocupar quando implementamos o padrão
• aspectos específicos de cada linguagem
– Exemplo de Código• no caso do GoF, em C++ (a maioria) ou Smalltalk
– Usos Conhecidos• exemplos de sistemas reais de domínios diferentes onde o padrão é utilizado
– Padrões Relacionados• quais outros padrões devem ser usados em conjunto com esse
• quais padrões são similares a este, quais são as dierenças
[Kon2005]
![Page 30: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/30.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo – padrão de teste de regressão
• Nome:– Teste de caso de uso de maior risco
• Problema– Útil quando não se dispõe de
tempo, recursos ou pessoal suficiente para reaplicar todos os testes
• Solução– Usar critérios de risco para avaliar
os casos de uso a serem testados– Aplicar os critérios para obter o
subconjunto de testes a ser reaplicado
– Usar como oráculo os resultados do conjunto de testes aplicado anteriormente
– Critérios de entrada: • Delta já foram testados• Conjunto de testes previamente
aplicados já existe• Matriz associando casos de uso
aos casos de teste foi criada• O ambiente de testes já foi
configurado igual aos dos testes prévios
– Critérios de saída• Todos os testes selecionados
foram aplicados e os bugs devidamente registrados
• Conseqüências– Risco moderado de não revelar
uma falha de regressão– Baixo custo de análise para seleção
de casos de teste...
[Binder 2000, c.15]Não é do GoF, mas usou o mesmo formato de descrição
![Page 31: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/31.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de projeto
• No GoF, padrões de projeto podem ser divididos nas seguintes categorias:– Padrões de criação (creational): abstraem o processo de criação de
objetos a partir da instanciação de classes• Ex.: Abstract Factory, Builder, Singleton
– Padrões estruturais (structural): tratam da forma na qual classes e objetos estão organizados para a formação de estruturas maiores
• Ex.: Adapter, Composite, Decorator, Façade
– Padrões comportamentais (behavioral): tratam de algoritmos e da atribuição de responsabilidades a objetos.
• Ex.: Iterator, Mediator, Observer, State, Visitor
![Page 32: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/32.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de criação
• Abstract Factory– Fornece uma interface para a criação de uma família de objetos
relacionados ou dependentes, sem especificar as suas classes concretas
• Usos conhecidos: – sistemas que necessitam de suporte a diferentes tipos de interfaces gráficas
(Motif, Windows, ...).
– Sistemas que devem ser configurados em uma dentre várias famílias de produtos.
![Page 33: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/33.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Abstract Factory - Motivação
• Considere uma aplicação com interface gráfica que é implementada para plataformas diferentes (Motif para UNIX e outros ambientes para Windows e MacOS).
• As classes implementando os elementos gráficos não podem ser definidas estaticamente no código. Precisamos de uma implementação diferente para cada ambiente. Até em um mesmo ambiente, gostaríamos de dar a opção ao usuário de implementar diferentes aparências (look-and-feel).
• Podemos solucionar este problema definindo uma classe abstrata para cada elemento gráfico e utilizando diferentes implementações para cada aparência ou para cada ambiente.
• Ao invés de criarmos as classes concretas com o operador new, utilizamos uma Fábrica Abstrata para criar os objetos em tempo de execução.
• O código cliente não sabe qual classe concreta utilizamos.
[Kon2005]
![Page 34: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/34.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Abstract Factory - Aplicabilidade
Use uma fábrica abstrata quando:
• um sistema deve ser independente da forma como seus produtos são criados e representados;
• um sistema deve poder lidar com uma família de vários produtos diferentes;
• você quer oferecer uma biblioteca de classes de produtos mas não quer revelar as suas implementações, quer revelar apenas suas interfaces.
[Kon2005]
![Page 35: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/35.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo de utilização do abstract factory
GUIMotif
criaBarraRolagem ( )criaJanela ( )
GUIWindows
criaBarraRolagem ( )criaJanela ( )
GUIAbstrata
criaBarraRolagem ( )criaJanela ( )
IGuiAbstrata
concretas
Define uma interface para as operações que criam objetos como produtos abstratos
Fábrica Abstrata: classe abstrata contendo o código comum às classes concretas (fábricas) que têm um tema comum (ex.: interface-usuário)
Fábrica: Implementa as operações que criam objetos para os produtos concretos
![Page 36: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/36.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo de utilização do abstract factory
GUIMotif
criaBarraRolagem ( )criaJanela ( )
GUIWindows
criaBarraRolagem ( )criaJanela ( )
GUIAbstrata
criaBarraRolagem ( )criaJanela ( )
IGuiAbstrata cliente
janelaWindows janelaMotif
BarraRolagemWindows
BarraRolagemMotif
Janela
usa
BarraRolagem
usa
usa
cria
cria
abstratas
![Page 37: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/37.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Abstract Factory - Participantes
• AbstractFactory (GUIAbstrata)
• ConcreteFactory (GUIMotif, GUIWindows)
• AbstractProduct (Janela, Barra de Rolagem)
• ConcreteProduct (JanelaMotif, BarraRolagemMotif, JanelaWindows, BarraRolagemWindows)
• Cliente - usa apenas as interfaces declaradas pela AbstractFactory e pelas classes AbstratProduct
![Page 38: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/38.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Abstract Factory - Colaborações
• Normalmente, apenas uma instância de ConcreteFactory é criada em tempo de execução.
• Esta instância cria objetos através das classes ConcreteProduct correspondentes a uma família de produtos.
• Uma AbstractFactory deixa a criação de objetos para as suas subclasses ConcreteFactory.
[Kon2005]
![Page 39: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/39.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Abstract Factory - Conseqüências
O padrão
1. isola as classes concretas dos clientes;
2. facilita a troca de famílias de produtos (basta trocar uma linha do código pois a criação da fábrica concreta aparece em um único ponto do programa);
3. promove a consistência de produtos (não há o perigo de misturar objetos de famílias diferentes);
4. dificulta a criação de novos produtos ligeiramente diferentes (pois temos que modificar a fábrica abstrata e todas as fábricas concretas).
[Kon2005]
![Page 40: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/40.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de criação
• Singleton– Garante a existência de uma única instância de uma
determinada classe e fornece um ponto global de acesso para ela.
• Uso conhecido: – programas que só podem ter uma instância sendo executada em
um determinado momento.
![Page 41: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/41.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo: Singleton// SingletonImpl.java
public final class SingletonImpl {
private static SingletonImpl instance = null;
private SingletonImpl() { ... }
public static SingletonImpl getInstance() {
if (instance==null) {
instance = new SingletonImpl();
}
return instance;
}
}
// usando o sigleton
public class UsoDoSingletonImpl {
:
SingletonImpl obj;
:
obj = SingletonImpl.getInstance();
:
}
retorna a instância criada
Singleton
static InstanciaUnica: Singleton
static getinstance ( ): Singleton
[Jandl2003]
![Page 42: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/42.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões estruturais• Composite
– Compõe objetos em estrutura de árvore para representar hierarquias do tipo partes-todo.
– Permite que se trate de maneira uniforme objetos individuais e composição de objetos, permitindo que objetos complexos sejam compostos, recursivamente, de objetos mais simples.
– Uso conhecido: • representar hierarquias de agregação (parte-todo)
![Page 43: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/43.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo: Composite
Clienteusa
1
*
Componente
+Operação ( )+Adicionar (in Componente)+Remover (in Componente)+BuscarParte (in índice: int)
ImplemComponente
+Operação ( )
Composite
+Operação ( )+Adicionar (in Componente)+Remover (in Componente)+BuscarParte (in índice: int)
![Page 44: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/44.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões estruturais• Decorator
– Atribui, dinâmicamente, responsabilidades adicionais a um objeto, para facilitar o uso de subclasses para extensão de funcionalidades.
– Só as responsabilidades do objeto são alteradas, não sua interface.
– Uso conhecido: • atribuição de enfeites gráficos e outras funcionalidades acessórias a
widgets
![Page 45: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/45.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo: Decorator
Componente_visual
Desenhar()
Decorator
Desenhar()
Visualizador_Texto
Desenhar ()
BordaEspessura _borda
Desenhar()Desenhar_borda ()
Barra_RolagemPosição-rolagem
Desenhar()Rolar ()
[Thelma2005]
![Page 46: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/46.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Mais alguns padrões estruturais
• Facade– Fornece uma interface única para um conjunto de interfaces de um
subsistema.
– Define uma interface de alto nível, tornando o subsistema mais fácil de usar.
– Uso conhecido: • interface única em sistemas complexos
![Page 47: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/47.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo: Facade
Facade
Subsistema ou componente
Interface única para o subsistema ou componente
![Page 48: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/48.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Mais alguns padrões estruturais
• Adapter– Converte a interface de uma classe em outra, na forma esperada
pelas suas clientes. Permite que classes com interfaces que, de outra forma, seriam incompatíveis, possam colaborar.
– Uso conhecido: • wrapper, serve para adaptar interface de classes
![Page 49: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/49.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Adapter (wrapper)
Cliente-Alvo: alvo1
Adapter- Servidor: servidor1+ void operacao_cliente ( )
Servidor- Servidor: servidor1+ void operacao_servidor ( )
Alvo
+ void operacao_cliente ( )
void operação_cliente( ){
servidor1.operação_servidor( )}
![Page 50: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/50.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões comportamentais
• Iterator– Fornece uma forma de aceder seqüencialmente aos elementos de
uma coleção sem expor sua representação subjacente
– Uso conhecido:• bibliotecas C++, Java
![Page 51: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/51.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo: Iterator
ImplemColeção
getIterator( ): Iterator
return new ImplemIterator (this)
ImplemIterator
IColeção
getIterator( ): Iterator
IIterator
hasNext( ): booleannext ( ): Object
![Page 52: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/52.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões comportamentais
• Mediator– Define um objeto que encapsula a interação entre um conjunto de
objetos.
– Promove o acoplamento fraco, evitando que os objetos refiram explicitamente uns aos outros.
– Uso conhecido: • arquitetura de aplicações
![Page 53: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/53.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Mediator
Mediador Colaborador
Mediador_concreto Colaborador_concreto1 Colaborador_concreto2
mediador
![Page 54: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/54.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Mais alguns padrões comportamentais
• Observer– Permite que todos os dependentes de um objeto sejam notificados e
atualizados automaticamente quando o objeto (sujeito) muda de estado.
– Utiliza um mecanismo de registro que permite ao sujeito notificar aos interessados sobre mudanças.
– Uso conhecido: propagação de modificações e atualizações com acoplamento fraco entre os objetos
![Page 55: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/55.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Exemplo: Observer
Observador
+update ( )
Observado
+attach (in Observer)+detach (in Observer)+notify ( )
*
Observado_concretoestado
+getEstado ( )
o {Observador}: o.update( )
Observador_concretoestadoObservado
+update ( )
estadoObservado = sujeito.getEstado( )
sujeito
![Page 56: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/56.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Os padrões do GoF
• Criação:– Abstract Factory
– Builder
– Factory Method
– Prototype
– Singleton
• Estruturais:– Adapter
– Bridge
– Composite
– Decorator
– Façade
– Flyweight
– Proxy
![Page 57: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/57.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Os padrões do GoF
• Comportamentais:– Chain of Responsibility
– Command
– Interpreter
– Iterator
– Mediator
– Memento
– Observer
– State
– Strategy
– Template Method
– Visitor
Consultar o catálogo!
![Page 58: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/58.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Como selecionar um padrão
• Examine a seção de Problemas do padrão.
• Considere como o padrão seleciona um determinado problema.
• Estude como os padrões se interrelacionam.
• Estude padrões de finalidade semelhante.
• Determine a causa para a re-estruturação do projeto.
• Determine como o padrão podem melhorar o projeto.
![Page 59: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/59.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Como usar um padrão
• Leia o padrão por inteiro, para ter uma visão geral.• Estude as seções de descrição do problema e da solução.• Olhe os exemplos de código do padrão.• Escolha nomes para os elementos do padrão que façam
sentido para o contexto da aplicação.• Defina as classes.• Escolha nomes para as operações que façam sentido para o
contexto da aplicação.• Implemente as operações de forma a apoiar as
responsabilidades e colaborações específicas da aplicação.
[Deschamps]
![Page 60: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/60.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Padrões de projeto: utilizar ou não?
– Melhoram a estrutura de algo já implementado, quando o domínio do problema está bem compreendido
– Aumentam a compreensão do código melhorando a modularidade, separação de conceitos e simplicidade de descrição
• ex.: é mais fácil dizer: “utiliza-se uma instância do padrão Visitor do que "este é um código que varre a estrutura e realiza chamadas a alguns métodos em uma ordem particular e de uma determinada forma".
– Utilize padrões somente para resolver problemas já identificados no projeto/código pois ...
– ... podem diminuir a capacidade de compreensão ao introduzir acesso indireto e aumentar a quantidade de código
![Page 61: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/61.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Onde obter mais informações
• Catálogo sobre padrões– http://www.dofactory.com/Patterns/Patterns.aspx#list
• Tutorial sobre padrões:– www.csc.calpoly.edu/~dbutler/tutorials/winter96/patterns/
objectives.html http://
• Padrões de projeto, Idiomas e Frameworks– http://www.cs.wustl.edu/~schmidt/patterns.html
• Apresentação geral sobre padrões– http://www.mindspring.com/~mgrand/pattern_synopses.htm
![Page 62: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/62.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Outros Padrões
Ver slides: Padroes_manut_Regina_2009.pdf
(64-...)
![Page 63: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/63.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Reuso - código
Ver meus slides
![Page 64: Eliane Martins - Instituto de Computação - UNICAMP Melhoria da Manutenibilidade Criado: Set/2005 Atualizado: Nov/2010](https://reader035.vdocuments.site/reader035/viewer/2022070311/552fc10b497959413d8c1177/html5/thumbnails/64.jpg)
Eliane Martins - Instituto de Computação - UNICAMP
Sumário dos principais pontos aprendidos