[clpe] design patterns com c#
TRANSCRIPT
![Page 2: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/2.jpg)
Quem Sou Eu? Centro de Informática - U.F.P.E.
Graduado em Ciências da Computação (2008) Mestrando em Ciências da Computação
Inove Informática Engenheiro de Software / Líder de Equipe
Certificações MCP | MCTS Web 2.0 SCJP 6.0
Intereseses Arquitetura, metodologias ágeis, desenvolvimento
Web
![Page 3: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/3.jpg)
Agenda Introdução Classificação Alguns padrões Princípios SOLID Anti-patterns
![Page 4: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/4.jpg)
Introdução
“How can you distribute responsibility for design through all levels of a large hierarchy, while
still maintaining consistency and
harmony of overall design?”
![Page 5: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/5.jpg)
Introdução Alexander sugeriu usar Padrões de Projeto
Dicionário de termos relacionados a decisões básicas de projeto arquitetural
Cada padrão descreve um problema comum do dia a dia e sua solução A solução pode ser reusada
Discussões arquiteturais passaram a ser conduzidas por essa linguagem
![Page 6: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/6.jpg)
Introdução [GoF] Design Patterns: Elements of Reusable
Object-Oriented Software
![Page 7: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/7.jpg)
Introdução“A design pattern names, abstracts, and
identifies the key aspects of a common design structure that make it useful for creating a
reusable object-oriented design.”
- Gang of Four (Gamma et al.)
![Page 8: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/8.jpg)
Por que padrões? Procurar objetos apropriados Determinar granularidade dos objetos Estimular reuso Projetar mudanças
![Page 9: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/9.jpg)
Nomenclatura Nome
Contrução de um vocabulário Problema
Quando aplicar o padrão Solução
Estrutura genérica de elementos Consequências
Trade-offs da implementação
![Page 10: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/10.jpg)
Classificação
Propósito
Criacional Estrutural Comportamental
Escopo
Classe
Factory Method
Adapter (class) InterpreterTemplate Method
Objeto
Abstract FactoryBuilderPrototypeSingleton
Adapter (object)BridgeCompositeDecoratorFacadeFlyweightProxy
Chain of ResponsabilityCommandIteratorMediatorMementoObserverStateStrategyVisitor
![Page 11: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/11.jpg)
Factory MethodIntenção Motivação Consequências
Fornece uma interface para criação de famílias de objetos, sem especificar suas classes concretas
A classe não pode antecipar o objeto que ela deve criar
A classe precisa que a subclasse especifique o objeto criado
Programação para interfaces
Necessidade de subclasses Creator para criação de Products específicos
![Page 12: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/12.jpg)
Factory Method Estrutura
![Page 13: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/13.jpg)
Factory Method Exemplo
![Page 14: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/14.jpg)
Factory Method
![Page 15: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/15.jpg)
DecoratorIntenção Motivação Consequências
Adiciona responsabilidades dinamicamente a um objeto
Adicionar responsabilidades a objetos ao invés de classes
Responsabilidades podem ser retiradas
Quando extensão por herança é impraticável
Mais flexibilidade do que heranças estáticas
Evita explosão de classes
Inúmeros objetos semelhantes
![Page 16: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/16.jpg)
Estrutura
Decorator
![Page 17: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/17.jpg)
Decorator Exemplo
![Page 18: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/18.jpg)
Decorator
![Page 19: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/19.jpg)
ObserverIntenção Motivação Consequências
Define dependências entre objetos, tal que quando um objeto muda de estado, seus dependentes são notificados e atualizados
Manter consistência entre objetos relacionados
Manter baixo acoplamento
Um objeto deve notificar outro objeto sem fazer suposições prévias
Acoplamento abstrato entre Subject e Observer
Suporte para comunicação broadcast
Atualizações inesperadas
![Page 20: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/20.jpg)
Observer Estrutura
![Page 21: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/21.jpg)
Observer Exemplo
![Page 22: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/22.jpg)
Observer
![Page 23: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/23.jpg)
StrategyIntenção Motivação Consequências
Define uma família de algoritmos, encapsula cada um, e os torna substituíveis.
Configurar uma classe com um entre vários comportamentos
Diferentes variação para um mesmo algoritmo
Encapsula detalhes de implementação de um algoritmo
Define um comportamento para contextos de reuso
Alternativa a extensão de classes
Elimina instruções condicionais
![Page 24: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/24.jpg)
Strategy Estrutura
![Page 25: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/25.jpg)
Strategy Exemplo
![Page 26: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/26.jpg)
Strategy
![Page 27: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/27.jpg)
SOLID Principles Expõe aspectos de gestão de dependência
no desenvolvimento orientado à objetos Identifica código frágil e difícil de mudar/estender Base para as –ilities desejadas por
desenvolvedores Março de 1995, Robert C. Martin
![Page 28: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/28.jpg)
SOLID PrinciplesSingle Responsability Principle
Open-Closed Principle
Liskov Substituition Principle
Interface Segregation Principle
Dependency Inversion Principle
![Page 29: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/29.jpg)
Single Responsability Principle Uma classe deve ter uma única razão para
mudar Uma responsabilidade é um eixo de mudança O que considerar como responsabilidade?
![Page 30: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/30.jpg)
Open-Closed Principle Entidades de software devem ser abertas para
extensões e fechadas para modificações Uma mudança deve ser concentrada, sem
afetar demais módulos do sistema
![Page 31: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/31.jpg)
Liskov Substituition Principle Subclasses devem ser substituíveis por sua
classe mãe Simples caso de violação do princípio
Quadrado x Retângulo
![Page 32: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/32.jpg)
Interface Segregation Principle Clientes não podem ser forçados a
dependerem de interfaces que não usam Interfaces pequenas e especícias para clientes
![Page 33: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/33.jpg)
Dependency Inversion Principle Dependa de abstrações, não de concreções Favorece OCP
![Page 34: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/34.jpg)
Anti-Patterns Um padrão que aponta como sair
De um problema para uma solução ruim De uma solução ruim para uma solução boa
Incentivados pela popularidade de Padrões de Projeto
1996, Michael Ackoyd - "AntiPatterns: Vaccinations Against Object Misuse"
![Page 35: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/35.jpg)
Anti-Patterns The Big Ball of Mud
Sistema sem arquitetura definida Overuse of Patterns
Uso de Design Patterns sem necessidade God Objects
Concentrar muitas responsabilidades à uma única classe
Polter Geist Objetos usados apenas para passar informação
![Page 36: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/36.jpg)
Anti-Patterns Geographically Distributed Development
Integrantes de uma equipe geograficamente separados grande parte do tempo
Accidental Complexity Introduzir complexidade desnecessária à solução
Walking Through a Mine Field Incerteza sobre o comportamento de um
componente Copy and Paste Programming
Copiar código existente ao invés de criar soluções genéricas
![Page 37: [CLPE] Design patterns com c#](https://reader035.vdocuments.site/reader035/viewer/2022062418/555a3e55d8b42a83368b4e45/html5/thumbnails/37.jpg)
Perguntas