Escolar Documentos
Profissional Documentos
Cultura Documentos
ENGENHARIA DE SOFTWARE
2018
Padrão de projeto
As características obrigatórias que devem ser atendidas por um padrão de projeto é composto
basicamente por 4 elementos que são:
● Nome do padrão;
● Problema a ser resolvido;
● Solução dada pelo padrão; e
● Consequências.
Os padrões de projeto:
● visam facilitar a reutilização de soluções de desenho - isto é, soluções na fase de
projeto do software - e
● estabelecem um vocabulário comum de desenho, facilitando comunicação,
documentação e aprendizado dos sistemas de software.
O nome do padrão é um identificador que podemos usar para descrever um problema de
projeto, soluções e conseqüências em uma palavra ou duas. Nomeando um padrão
imediatamente aumenta nosso vocabulário de design. Ele nos permite projetar em um nível
mais alto de abstração. Ter um vocabulário para padrões nos permite falar sobre eles com
nossos colegas, em nossa documentação e até para nós mesmos. Isso faz mais fácil pensar
em projetos e comunicá-los e seus trade-offs para outros. Encontrar bons nomes tem sido uma
das partes mais difíceis de desenvolver nosso catálogo.
O problema descreve quando aplicar o padrão. Isso explica o problema e seu contexto. Pode
descrever problemas específicos de design, como para representar algoritmos como objetos.
Pode descrever classe ou objeto estruturas que são sintomáticas de um design inflexível. Às
vezes o problema incluirá uma lista de condições que devem ser atendidas antes de sentido
aplicar o padrão.
*Creator
Decide quem pode ser o criador com base na associação de objetos e sua interação.
Prós:
Prós:
● Encapsulamento é mantido;
● Fraco acoplamento (facilidade de manutenção);
● Alta coesão (objetos fazem tudo relacionado à sua própria informação);
* High Cohesion
Prós:
● Melhor claridade e facilidade de compreensão do projeto;
● Simplificação da manutenção;
*Low Coupling
Problema: Como prover baixa dependência entre classes, reduzir o impacto de mudanças e
obter alta reutilização?
*Controller
O padrão controlador atribui a responsabilidade de lidar com os eventos do sistema para uma
classe que representa a um cenário de caso de uso do sistema global.
Problema: Quem deve ser o responsável por lidar com um evento de uma interface de
entrada?
Solução: Atribuir responsabilidades para receber ou lidar com um evento do sistema para:
● Uma classe que representa todo o sistema ou subsistema;
● Uma classe que representa cenário de caso de uso.
Prós:
● Diminui a sensibilidade da camada de apresentação em relação à lógica de domínio;
● Oportunidade para controlar o estado do caso de uso;
*Polymorphism
É um princípio, no qual subclasses de uma superclasse são capazes de invocar métodos, que
comportam-se de maneira diferente para cada classe derivada.
Problema: Como tratar alternativas baseadas no tipo? Como criar componentes de software
“plugáveis”?
Solução: É aconselhável atribuir responsabilidades aos tipos usando operações polimórficas,
isso quando alternativas ou comportamento relacionados variam com o tipo da classe.
Prós:
*Pure Fabrication
É uma classe que não representa um conceito no domínio do problema deve atender as
seguintes características: baixo acoplamento e potencial de reutilização dos mesmos
derivados.
Solução: Quando não se quer violar “High Cohesion” e “Low Coupling” e o “Expert” não
oferece soluções apropriadas que objeto deve ter responsabilidade?
Prós:
Apresenta vantagens como a criação de classes muito coesas e remove características não
coesas das classes de domínios de negócios.
*Indirection
Problema: Como evitar acoplamento direto entre duas ou mais classes? Como evitar baixo
acoplamento e manter alta possibilidade de reuso através do desacoplamento de objetos?
Solução: Para um objeto intermediário que faz mediação entre componentes e serviços de
modo que esses não sejam diretamente acoplados, será atribuída a responsabilidade.
Prós:
*Protected Variations
Solução:
● Identificar pontos de variação e atribuir responsabilidades para criar uma interface
estável em volta desses pontos;
● Evitar o envio de mensagens a objetos muito distantes.
Prós:
Em 1995, Erich Gamma, John Vlissides, Ralph Johnson e Richard Helm descreveram 23
padrões que podem ser aplicados ao desenvolvimento de sistemas de software orientados a
objetos.
- Gamma e seus colaboradores são conhecidos como a Gangue dos Quatro (Gand of Four, GoF).
Não são invenções. São documentação de soluções obtidas através da experiência. Foram
coletados de experiências de sucesso na indústria de software, principalmente de projetos em
C++ e SmallTalk.
Criacional
● Singleton: assegura que somente um objeto de uma determinada classe seja criado em
todo o projeto;
● Abstract Factory: permite que um cliente crie famílias de objetos sem especificar suas
classes concretas;
● Builder: encapsular a construção de um produto e permitir que ele seja construído em
etapas;
● Prototype: permite você criar novas instâncias simplesmente copiando instâncias
existentes;
● Factory Method: as subclasses decidem quais classes concretas serão criadas.
*Estruturais
*Comportamental
Referências Bibliográficas
PIERIN, Felipe. Classificação dos Padrões de Projeto GoF. 2011. Disponível em:
<https://brizeno.wordpress.com/2011/12/12/classificacao-dos-padroes-de-projeto-gof/>. Acesso
em: 14 jun. 2018.
HELM, Richard et al. Builder. In: GAMMA, Erich et al. Design Patterns: Elements of Reusable
Object-Oriented Software. [S.l.]: Addison-Wesley, 1994. p. 110-120. Disponível em:
<http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf>. Acesso em: 12 jun. 2018.