padrões de projeto aspectos avançados em engenharia de software fernanda campos ufjf/dcc aula 8
TRANSCRIPT
![Page 1: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/1.jpg)
Padrões de Projeto
Aspectos Avançados emEngenharia de Software
Fernanda CamposUFJF/DCC
Aula 8
![Page 2: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/2.jpg)
O problema
Software:• Os custos de projeto
estão crescendo
• O prazo está se tornando mais curto
• Custo de manutenção é maior
Hardware:• Os custos, relativos,
estão diminuindo
• O tempo de desenvolvimento está encurtando
![Page 3: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/3.jpg)
O problema
Custos em projeto de software por fase de desenvolvimento:
Etapa de Trabalho %
Análise de requisitos 3
Projeto 8
Programação 7
Testes 15
Manutenção 67
Fonte: Butler Bloor
![Page 4: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/4.jpg)
Introdução
problemas de software +
crescente taxa de mudanças nos requisitos
![Page 5: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/5.jpg)
Introdução
Categorias básicas de projeto:
• Bem-sucedidos: resultam em funcionalidade plena no prazo adequado (16,2%);
• Contestados: requerem tempo e orçamento maiores do que o proposto (52,7%);
• Refutados: são cancelados durante a fase de desenvolvimento (31,1%).
![Page 6: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/6.jpg)
O que o cliente deseja Uma solução que:
• Atenda as necessidades funcionais;• Adapte-se ao ambiente de rápidas mudanças dos
negócios;• Enquadre-se às limitações de run-time [tempo /
espaço].
Um software que:• Seja de fácil manutenção;• Seja desenvolvido dentro dos recursos propostos;• Tenha uma longevidade apropriada.
![Page 7: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/7.jpg)
Motivação
Vamos observar dois profissionais de marcenaria: construir gavetas.
![Page 8: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/8.jpg)
Motivação
Carpinteiro 1:
• Como você acha que deveríamos construir essas gavetas?
![Page 9: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/9.jpg)
Motivação Carpinteiro 2:
• “Bem, acho que devemos fazer o canto cortado reto a madeira e então cortando-a de volta em 45 graus...
• ...indo depois reto de volta para baixo e aí de volta para cima, no outro sentido, em 45 graus; depois, indo reto de volta para baixo e, então,...
• ..até que você termina com uma junta encaixada.
![Page 10: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/10.jpg)
Motivação
Carpiteiro 1:• Devo usar uma junta encaixada ou uma de
meia esquadria?
É uma solução mais simplesÉ fraca
Não é aparente
É uma solução mais complexaÉ insensível à temperatura e à umidadeÉ independente do sistema de fixação
Esteticamente mais bonita
![Page 11: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/11.jpg)
Motivação
Vantagens:
• Reutilizar soluções;
• Estabelecer terminologia comum;
• Ter uma perspectiva de mais alto nível acerca dos problemas e do processo de projeto: abstração.
![Page 12: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/12.jpg)
Motivação
Alexander investigou:
• “A qualidade é objetiva?”
• “Como reconhecer e diferenciar um projeto de boa qualidade em relação a um de baixa qualidade?”
Christopher Alexander
![Page 13: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/13.jpg)
Motivação
Alexander descobriu:
• As estruturas estão diretamente ligadas com o problema que tentam resolver;
• Padrões: similaridades entre projetos de alta qualidade.
![Page 14: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/14.jpg)
Definição
1979 por Alexander: “Cada padrão descreve um problema que ocorre repetidamente no nosso ambiente e, portanto, descreve o cerne da solução desse problema, de tal forma que você pode utilizar essa solução um milhão de vezes repetidas, sem nunca fazê-la de duas vezes do mesmo modo.”
![Page 15: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/15.jpg)
Definição
Padrão: “descreve uma solução para um problema em um determinado contexto”.
![Page 16: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/16.jpg)
Descrição
De acordo com Alexander:
• O nome do padrão;
• O propósito do padrão;
• Como podemos utilizar o padrão;
• Restrições e motivos a serem considerados.
![Page 17: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/17.jpg)
O início
1990 – Desenvolvedores imaginavam:
• Existem problemas em software que poderiam ser resolvidos da mesma maneira?
• Seria possível projetar software em termos de padrões?
![Page 18: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/18.jpg)
O início
A GOF publicou o livro de maior influência:
• Design Patterns: Elements of Reusable Object-Oriented Software
![Page 19: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/19.jpg)
O início Os propósitos do livro eram:
• Aplicar a idéia de padrões de projeto a projeto de software;
• Descrever uma estrutura para catalogar e descrever padrões de projeto;
• Identificar e catalogar estes padrões (23);
• Postular estratégias e enfoques orientados a objetos baseados nesses padrões de projeto.
![Page 20: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/20.jpg)
Padrões para Projetos Quando especialistas trabalham na solução de um
problema é raro criarem soluções totalmente novas, em geral buscam problemas similares que já tenham sido resolvidos e reutilizam a essência da resolução na solução do novo problema (Budchman et al, 1996).
“Um padrão é uma idéia que foi utilizada num contexto prático e que provavelmente será utilizada por outros” (Fowler, 1997).
Desta forma muitas experiências em criação de modelos para projetos e a repetição contínua desses problemas apresentados levam à especificação dos padrões.
![Page 21: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/21.jpg)
Padrões para Projetos
Padrões documentam experiências de projetos e não são inventados ou criados artificialmente.
Uma característica importante dos padrões é disponibilizar para muitos um conhecimento adquirido.
O esquema da solução é especificado pela descrição dos componentes, suas funções e relacionamentos e as formas de colaboração entre eles (Budchman et al., 1996).
![Page 22: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/22.jpg)
Padrões para Projetos A construção de padrões é um processo social interativo
de coleta, compartilhamento e amplificação de experiência e conhecimento distribuídos (Lea 1994 in Vasconcelos Junior, 1997).
Os padrões ajudam na redução da complexidade de muitas situações na vida real e podem fornecer combinações de ações que levam à solução de problemas (Pree, 1995).
Para Buschmann et al. (1996), os padrões demonstram as prováveis soluções de uma forma facilmente disponível e se possível, bem escrita.
![Page 23: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/23.jpg)
Padrões para Projetos “O emprego de padrões tem sido, portanto, no sentido de
disseminar soluções incorporando, além de soluções, informações tais como descrições do problema e contexto de aplicação” (Vasconcelos Junior, 1997).
O formato dos padrões é, a partir desta conceituação, uma técnica de representação do conhecimento sobre problemas e suas soluções.
A inovação que esta técnica introduz é a forma sistemática de documentar e descrever os padrões de forma a facilitar a sua aplicação e uso.
![Page 24: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/24.jpg)
Padrões para Projetos Segundo Fowler (1997) padrões conceituais, incluídos os
design patterns, são aqueles que representam a maneira como as pessoas pensam, mais do que a maneira como um sistema é planejado. O modelo conceitual é um privilégio humano de modo que o que buscamos é a sua aplicabilidade.
Design Patterns complementam métodos existentes e buscam soluções para os problemas recorrentes num alto nível de abstração. Podem envolver desde um conjunto simples de regras e relações até elaboradas guidelines, envolvendo complexas relações daí derivadas (Lyardet et al., 1998).
![Page 25: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/25.jpg)
Padrões para Projetos Existem alguns elementos que são considerados essenciais
para um padrão, entre eles podemos citar (Gamma et al., 1995):
O nome: usado para descrever o problema, sua solução e conseqüências em uma ou duas palavras;
O problema: descreve quando usar o padrão, explica o problema e o seu contexto. Algumas vezes inclui uma lista de condições que devem ser satisfeitas antes da aplicação do padrão;
A solução: descreve os elementos que compõem o projeto, seus relacionamentos, responsabilidades e colaborações. É uma descrição abstrata do design do projeto e como um conjunto de elementos o resolve;
As conseqüências: são os resultados e comprometimentos da aplicação do padrão. As conseqüências são críticas para avaliar as alternativas e para entender custos e benefícios para aplicação de padrões.
![Page 26: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/26.jpg)
Padrões para Projetos Considerando a literatura sobre padrões, Vasconcellos Junior (1997)
apresentou um conjunto básico de informações importantes para registrar padrões de forma a facilitar a consulta:
Identificação: um nome, ou frase, descritivo, curto e familiar, normalmente sendo mais indicativo da solução do que do problema ou contexto;
Exemplo: um ou mais casos ilustrando o emprego de padrões; Contexto: delineamento de situações em que os padrões são aplicáveis (geralmente inclui
informações de suporte, discussões sobre a necessidade de existência do padrão e evidências de sua generalidade);
Problema: uma descrição das forças e restrições relevantes e como interagem; Solução: uma representação da solução do problema, descrita de forma a ser útil, já que esta é a
parte reutilizável. Soluções podem se referenciar e se relacionar com outros padrões de maior ou menor nível;
Conseqüência: uma descrição das implicações da aplicação do padrão, como restrições e comprometimentos;
Padrões relacionados: outros padrões que tem alguma relação com este. Por, exemplo, aqueles que podem ser usados em conjunto ou que são semelhantes.
![Page 27: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/27.jpg)
Padrões para Projetos Fowler (1997), entretanto, descreve quatro partes
essenciais que os padrões devem ter, ressaltando a forma como muitos autores vem descrevendo seus padrões. Para o autor esta forma é importante porque ela sustenta a definição de um padrão como a solução de um problema num contexto. São elas:
uma afirmação do contexto onde o padrão é utilizado; o problema que ele busca solucionar; as forças que atuam na formação da solução;
e a solução que resolve as forças.
![Page 28: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/28.jpg)
Padrões para Projetos
Buschmann et al. (1996) adotam um esquema de três partes para documentar padrões:
Contexto: a situação que originou o problema;
Problema: o problema que se originou do contexto;
Solução: uma resolução comprovada do problema.
![Page 29: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/29.jpg)
Padrões para ProjetosContexto
O contexto estende a dicotomia problema-solução descrevendo a situação na qual o problema ocorre.
Especificar um contexto é uma tarefa difícil e é praticamente impossível prever todas as situações onde um padrão pode ser utilizado.
Uma solução apresentada é listar todas as situações conhecidas onde a utilização do padrão pode ser relevante.
![Page 30: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/30.jpg)
Padrões para ProjetosProblema
O problema é a descrição dos problemas que se originam repetitivamente do contexto. Inicia-se com uma especificação geral do problema, capturando a sua essência, que é completada por um conjunto de forças.
A idéia de “forças” é introduzida pela lógica fuzzy onde deve-se determinar quais fatores são cruciais para a solução de seu problemas, quais os aspectos relevantes ou não, a indicação da solução de seu problema será fornecida a partir do total de condições, fatores e/ou “forças” cruciais que constam no problema apresentado.
O termo “forças” é usado para especificar aspectos do problema que devem ser considerados quando da resolução do problema, tais como: requisitos que a solução deve abordar, obrigações que devem ser consideradas e propriedades que a solução deve ter.
![Page 31: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/31.jpg)
Padrões para ProjetosSolução
Muitos problemas podem ter mais de uma solução, e a adequação da solução ao problema está relacionada ao contexto em que o problema ocorre. Cada solução leva em consideração algumas forças e soluciona umas em detrimento de outras, ou pode mesmo ignorá-las. A solução mais apropriada é a que melhor resolve as forças de mais alta prioridade para o contexto em questão (Meszaros et al., 1998).
![Page 32: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/32.jpg)
Padrões para Projetos
Os usuários dos padrões esperam que os mesmos contenham determinadas informações que os diferenciem da descrição problema/solução.
Meszaros et al. (1998) demonstram o relacionamento entre os elementos de um padrão na figura, destacando os elementos mandatórios que os mesmos deverão conter.
![Page 33: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/33.jpg)
USUÁRIOSDE PADRÕES CONTEXTO
FORÇA
SOLUÇÃOPROBLEMA
TEM
OPERA EM
PRIORIZA
RESOLVE
SOLUCIONA
![Page 34: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/34.jpg)
Sistemas de Padrões Os padrões não existem isoladamente, pois existem muitas
interdependências entre eles. Um sistema de padrões agrupa padrões individuais e descreve como eles se conectam e como eles se complementam. Um sistema é mais do que uma coleção de padrões e deve ser organizado de uma forma que facilite a sua utilização e que guie os usuários na seleção dos padrões. Sendo assim, o modelo de descrição dos padrões, para contemplar um sistema, deve evidenciar como o padrão se conecta com os outros padrões, com quais outros padrões ele pode ser conectado, com quais outros padrões ele pode ser refinado e combinado, quais variáveis ele supõe e quais outros padrões resolvem o mesmo problema de maneira diversa da apresentada (Budchman et al, 1996).
![Page 35: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/35.jpg)
Sistemas de Padrões
Um sistema de padrões deve assegurar a sua evolução uma vez que nem mesmo os sistemas mais maduros permanecerão estáticos (Budchman et al, 1996). Novos padrões devem ser incorporados ao sistema e padrões obsoletos devem ser retirados e, em qualquer caso, os relacionamentos devem ser atualizados
![Page 36: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/36.jpg)
DescriçãoPadrões de Projeto OO Nome:
• todos os padrões tem um nome único que os identifica; Intenção:
• o propósito do padrão; Problema:
• o problema que o padrão está tentando resolver; Solução:
• como o padrão provê uma solução para o problema no contexto em que ele aparece; Participantes e colaboradores:
• as entidades envolvidas no padrão; Conseqüências:
• investiga as forças que nele agem; Implementação:
• como o padrão pode ser implementado; Estrutura de design:
• Meta-modelo.
![Page 37: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/37.jpg)
Classificação Propósito:
• De criação: criação de objetos;• Estrutural: composição de classes ou objetos;• Comportamental: maneira pelas quais classes ou
objetos interagem e distribuem responsabilidades. Escopo:
• Classe: relacionamento entre classes e sub-classes (estático);
• Objeto: relacionamento de objetos que podem ser mudados em tempo de execução (dinâmico).
![Page 38: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/38.jpg)
Padrões no ProjetoTipos (Pressman)
Padrões arquiteturais – definem uma estrutura global o software, indicam oi relacionamento entre subsistemas e componentes do software e definem as regras para especificar relacionamentos entre os elementos (classes, pacotes, componentes, subsistemas ) da arquitetura.
![Page 39: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/39.jpg)
Padrões no ProjetoTipos (Pressman)
Padrões de projeto – atendem a um elemento específico do projeto tal como uma agregação de componentes para resolver algum problema de projeto, relacionamentos entre componentes ou os mecanismos para efetuar a comunicação componente a componente.
![Page 40: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/40.jpg)
Padrões no ProjetoTipos (Pressman)
Padrões de código – são padrões específicos da linguagem e geralmente implementam um elemento algorítmico de um componente, um protocolo epecífico de interface, ou um mecanismo para comunicação entre omponentes.
![Page 41: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/41.jpg)
Strategy
![Page 42: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/42.jpg)
Strategy
![Page 43: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/43.jpg)
Strategy
Intenção: permitir utilizar diferentes algoritmos, dependendo do contexto em que eles ocorrem;
Problema: a seleção de um algoritmo depende do cliente ou dos dados;
Solução: separar a seleção de algoritmos da implementação destes.
![Page 44: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/44.jpg)
Strategy
Conseqüências:• Defini uma família de algoritmos;
• Comandos como switch e condicionais podem ser eliminados;
• Invoca-se todos os algoritmos da mesma maneira.
Implementação: utilizar uma interface e instanciar a derivação especifica para o contexto.
![Page 45: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/45.jpg)
Strategy
Estrutura:
![Page 46: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/46.jpg)
Strategy
Exemplo:
Applet Estratégia ordena vetor
Bubble sort Bidirecional bubble sort Quick sort
![Page 47: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/47.jpg)
Strategy Código:
context(...) {if(alg == BUBBLE) {
b.sort(vec);} else if(alg == BIBUBBLE) {
bb.sort(vec);} else { // Q
q.sort(vec);}
}
![Page 48: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/48.jpg)
Strategy
Exemplo:
algorithm
![Page 49: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/49.jpg)
Strategy
Código:
class SortAlgorithm {...void sort(int a[]) ... {}...
}
![Page 50: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/50.jpg)
Strategy Código:
public class QSortAlgorithm extends SortAlgorithm {...void sort(int a[]) ... {
...}...
}
![Page 51: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/51.jpg)
Strategy Código:
public class SortItem extends ... implements ... {...SortAlgorithm algorithm;...public void init() {
String at = getParameter("alg");...algName = at + "Algorithm"; ...
}...public void run() {
...algorithm = (SortAlgorithm)Class.forName(algName).newInstance(); ...algorithm.sort(arr);
}...
}
![Page 52: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/52.jpg)
Strategy Código:
<html>...<applet code=SortItem.class …><param name="alg" value="BubbleSort">...<applet code=SortItem.class …><param name="alg" value="BidirBubbleSort">...<applet code=SortItem.class …><param name="alg" value="QSort">...</html>
![Page 53: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/53.jpg)
Strategy
Applet:
• SortDemo/example1.html
![Page 54: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/54.jpg)
Abstract Factory
![Page 55: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/55.jpg)
Abstract Factory
![Page 56: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/56.jpg)
Abstract Factory
Intenção: ter conjuntos de objetos para casos particulares;
Problema: objetos relacionados precisam ser instanciados;
Solução: coordenar a criação de famílias de objetos.
![Page 57: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/57.jpg)
Abstract Factory
Conseqüências: isola as regras referentes sobre como utilizar os objetos;
Implementação: definir uma classe abstrata que especifica quais objetos devem ser implementados, e a seguir, implementar uma classe concreta para cada família.
![Page 58: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/58.jpg)
Abstract Factory
Estrutura:
![Page 59: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/59.jpg)
Abstract Factory
Exemplo:
![Page 60: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/60.jpg)
Uma solução alternativa
![Page 61: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/61.jpg)
Facade
![Page 62: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/62.jpg)
Facade
Intenção: simplificar o uso de um sistema através de uma única interface;
Facade
![Page 63: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/63.jpg)
Facade
Estrutura:
![Page 64: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/64.jpg)
Facade
Exemplo:
![Page 65: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/65.jpg)
Composite Intenção:Geralmente temos a necessidade de manipular
objetos compostos (composites) exatamente da mesma forma que manipulamos objetos primitivos;
Problema:Se precisássemos distinguir entre objetos primitivos e objetos compostos para realizarmos operações nestes dois tipos de objetos, nosso código tornaria-se mais complexo e difícil de implementar, manter e estender;
![Page 66: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/66.jpg)
Composite Solução:Compor objetos em uma estrutura de árvore
para representar hierarquias parte-todo. Composite permite que os clientes tratem objetos individuais e composições de objetos uniformemente;
Conseqüências:Composite é composto de uma coleção de outros componentes abstratos, que podem ser qualquer outro tipo de componente concreto, incluindo o próprio Composite. Todos eles são componentes abstratos e quando um método é invocado de um objeto Composite, ele simplesmente manda requisições seqüencialmente para todos seus componentes “filhos”;
![Page 67: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/67.jpg)
Composite Implementação:
// This method is a Composite methodpublic void draw() {
// Iterate over the components for(int i=0; i < getComponentCount(); ++i) {
// Obtain a reference to the component and invoke its draw method Component component = getComponent(i); component.draw(); }}
![Page 68: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/68.jpg)
Composite
Estrutura:
f.operacao();
![Page 69: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/69.jpg)
Composite
Exemplo:
![Page 70: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/70.jpg)
Observer Intenção: definir uma dependência um-para-muitos entre
os objetos, para quando um deles mudar de estado todos os seus dependentes sejam notificados e atualizados automaticamente;
Problema: precisa-se notificar uma lista variável de objetos de que um evento ocorreu;
Solução: Fazer com que os observadores deleguem a responsabilidade de monitoração de um evento a um objeto central: o sujeito.
![Page 71: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/71.jpg)
Observer
Conseqüências: sujeitos podem informar à observadores sobre eventos;
Implementação: anexar objetos que queiram saber sobre a ocorrência de um evento em um objeto que faz a monitoração do evento.
![Page 72: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/72.jpg)
Observer
Implementação:public interface Subject { public void addObserver( Observer o ); public void removeObserver( Observer o );}
public interface Observer { public void update( Subject o );}
![Page 73: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/73.jpg)
Observerpublic class IntegerDataBag implements Subject {
private ArrayList list = new ArrayList(); private ArrayList observers = new ArrayList();
public void add( Integer i ) { list.add( i ); notifyObservers(); }
public Integer remove( int index ) { if( index < list.size() ) { Integer i = (Integer) list.remove( index ); notifyObservers(); return i; } return null; }
![Page 74: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/74.jpg)
Observer
private void notifyObservers() { // loop through and notify each observer Iterator i = observers.iterator(); while( i.hasNext() ) { Observer o = ( Observer ) i.next(); o.update( this ); } }}
![Page 75: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/75.jpg)
Observer Estrutura:
![Page 76: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/76.jpg)
Observer Exemplo:
Sujeito: O conjunto de dados envia notificações a todos aqueles que o estão observando cada vez que seu conteúdo mudar.
Observadores: Cada observador envia uma requisição para os dados atualizados.
Conjunto de Dados
Fórmula cálculotaxas
Gráfico de Fatias
Gráfico de Barras
![Page 77: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/77.jpg)
Mediator Intenção: definir um objeto que encapsula
como um conjunto de objetos interagem;
Problema: projetos orientados a objetos encorajam a distribuição de comportamentos entre os objetos;
Solução: encapsular o comportamento coletivo em um objeto separado, que é responsável por controlar e coordenar a interação do grupo de objetos.
![Page 78: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/78.jpg)
Mediator
Conseqüências: limita subclasses, simplifica protocolos de objetos, abstrai como os objetos cooperam e centraliza o controle;
Implementação: os colaboradores tem que comunicar o mediador quando um evento de interesse ocorre. Uma aproximação é uma implementação usando Observer.
![Page 79: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/79.jpg)
Mediator
Estrutura:
![Page 80: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/80.jpg)
Mediator
Exemplo:
![Page 81: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/81.jpg)
Bridge Intenção: separar abstração da
implementação;
Problema: as derivações de uma classe abstrata devem usar múltiplas implementações sem causar uma explosão no número de classes;
Solução: definir uma interface para todas as implementações a serem usadas e fazer com que as derivações da classe abstrata a usem.
![Page 82: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/82.jpg)
Bridge
Conseqüências: O desacoplamento entre as implementações e os objetos que as usam aumenta a capacidade de extensão;
Implementação:• Encapsular as implementações em uma classe
abstrata;
• Incluir um apontador para ela na classe-base de abstração.
![Page 83: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/83.jpg)
Bridge Estrutura:
![Page 84: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/84.jpg)
Bridge
Exemplo:
![Page 85: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/85.jpg)
Decorator Intenção: anexar, dinamicamente,
responsabilidades adicionais a um objeto;
Problema: necessidade de acrescentar funcionalidades adicionais à um objeto, antes ou depois da funcionalidade básica;
Solução: estender a funcionalidade de um objeto de forma encadeada, sem recorrer à subclassificação.
![Page 86: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/86.jpg)
Decorator Conseqüências: a funcionalidade que deve ser
adicionada reside em pequenos objetos. A vantagem está na capacidade de adicionar dinamicamente essa função antes ou depois da funcionalidade básica;
Implementação: criar uma classe abstrata que represente tanto a classe original como as novas funções a serem adicionadas a ela. Nos decoradores, colocar as novas chamas de função antes ou depois das novas chamadas encadeadas, a fim de obter a ordem correta.
![Page 87: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/87.jpg)
Decorator
Estrutura:
![Page 88: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/88.jpg)
Decorator
Exemplo:VisualComponent
Draw()
TextView
Draw()
Decator
Draw()
ScrollDecorator
ScrollPosition
Draw()ScrollTo()
BorderDecorator
borderWidth
Draw()DrawBorder()
![Page 89: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/89.jpg)
MVC
Intenção: Uma maneira de quebrar uma aplicação, ou apenas parte dela, em partes, com uma clara separação dos objetos de cada parte;
Problema: Aplicações que necessitem a capacidade de manter múltiplas views dos mesmos dados;
Solução: Encapsular os dados junto com seu processamento (o modelo), isolando de sua manipulação (o controlador) e apresentação (view);
![Page 90: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/90.jpg)
MVC
Conseqüências: O desacoplamento modifica desde como os dados são manipulados até como são apresentados ou armazenados, enquanto unifica o código em cada componente. Por causa desta separação, múltiplas views e controladores podem “interfacear” com ou mesmo modelo;
![Page 91: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/91.jpg)
MVC
Implementação:O MVC é um padrão composto de vários outros
padrões, como exemplo:
• As views formam um árvores usando Composite;
• A relação entre views e modelos é feita via Observer;
• Os controladores são estratégias de views (Strategy).
![Page 92: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/92.jpg)
MVC
Estrutura:
![Page 93: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/93.jpg)
Padrões de Projeto
• utilizar padrões é:• reutilizar soluções;
• produzir código flexível.
• documentar em +alto nível o sistema;
• “Os padrões fornecem a você uma perspectiva de mais alto nível acerca dos problemas e do processo de orientação a objetos...”
![Page 94: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/94.jpg)
UML & Padrões de Projeto
• UML sem Padrões
• Padrões sem UML• Não obtemos um ferramental completo
• UML com Padrões• Atingimos o máximo do potencial que podemos em
um desenvolvimento
![Page 95: Padrões de Projeto Aspectos Avançados em Engenharia de Software Fernanda Campos UFJF/DCC Aula 8](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc11b497959413d8c98cc/html5/thumbnails/95.jpg)
Referências
FOWLER, Martin; SCOTT, Kendall. UML Essencial. Bookman, 2000.
LARMAN, Craig. Utilizando UML e Padrões. Bookman, 2000.
LEE, Richard C.; TEPFENHART, William M. UML e C++. Makron Books, 2002.
SHALLOWAY, Alan; TROTT James R. Explicando Padrões de Projeto. Bookman, 2004.
Sun Microsystems. Core J2EE Patterns. Campus, 2002
http://inf.unisinos.br/~crespo
http://dei.unicap.br/~sergio
http://www.netobjectives.com/design.htm#Design_patterns_are
http://www.cmcrossroads.com/bradapp/docs/patterns-nutshell.html