padrÕes de projeto.. grasp (general responsibility assignment software patterns). gof(gang of four)

38
PADRÕES DE PROJETO.

Upload: internet

Post on 16-Apr-2015

112 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

PADRÕES DE PROJETO.

Page 2: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

GRASP (General Responsibility Assignment Software Patterns).

GoF(Gang of Four)

Page 3: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

PRINCÍPIOS DE PADRÕES DE

PROJETO.

Page 4: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Princípio Aberto Fechado

Entidades de software como classes, módulos e funções devem ser abertas para expansão, mas fechadas para modificações

Page 5: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Princípio Inversão de Dependência

• “Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.”;• “Abstrações não deve depender de detalhes. Detalhes devem depender abstrações”.

Page 6: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Princípio Segregação de Interfaces

“Os clientes não devem depender de interfaces que eles não usam”.

Este princípio nos ensina a cuidar da forma que escrevemos nossas interfaces. Quando escrevemos as nossas interfaces, deve-se ter o cuidado de só acrescentar métodos que deveriam estar lá. Se acrescentamos métodos que não deveriam estar lá as classes que à implementam terão que implementar esses métodos. Por exemplo, se vamos criar uma interface chamada Trabalho e adicionar um método de intervalo para o almoço, todos os trabalhadores terão de implementá-lo. E se o trabalhador é um robô?Interfaces contendo métodos que não são específicas para isso são chamadas poluídas ou de gorduras interfaces. Devemos evitá-los.

Page 7: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Programe para uma interface, e não para uma implementação.

Desta forma, você encapsula os códigos que podem variar para que futuras alterações não sejam complicadas e também forneça um único ponto de alteração. Esse princípio é a base de todos os padrões.O padrão strategy a utiliza.

Page 8: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Dê preferência para o “Tem um” à “é um”.

“Dar prioridade e composição”.

Padrões de projeto tendem a dar prioridade a utilização de composição, ela permite o controle dos objetos em “tempo de execução”, dinamicamente, enquanto heranças são estáticas e pouco flexíveis(“em tempo de compilação”)

Lembre-se que composição é um tipo de associação(“UML”) bidirecional entre objetos instanciados, daí a manipulação ser em tempo de execução.

Page 9: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Encapsule o que varia

Programe para interface à implementação. Dessa forma seu código estará preparado para o futuro de forma mais flexível e extensível.

Page 10: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Abstract Factory Builder Factory Method Prototype Singleton

Padrões de criação

Page 11: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Abstract Factory Fornece uma interface para a criação de uma família de objetos relacionados ou dependentes, sem especificar suas classes concretas.

Também é conhecida como “KIT”.

Como possui escopo de objeto, manipula objetos em “tempo de execução(composição)” fornece interfaces para serem implementadas por classes que desejam criar seus objetos.

Page 12: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Builder

Permite a separação da construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações.

Um exemplo é a conversão em “tempo de execução” do um formato RTF.

Se diferencia do Abstract Factory pela criação de objetos passo a passo, ao invés de criar todos os objetos de uma só vez.

Page 13: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Factory Método(Fabrica Virtual)

Define uma interface para a criação de um objeto, mas deixa as subclasses decidirem qual classe a ser instanciada. permite postergar(deferir) a instanciação em subclasses.

Em resumo, deixa as subclasses escolherem quais objetos criarem(através de herança).

Esse padrão é o único voltado para o escopo classe, os demais são voltados para objeto. Lembrando que os escopo de classe são manipulados em “tempo de compilação(herança)” e os de objetos, em “tempo de execução(composição e delegação)”.

Page 14: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Prototype

Especifica objetos a serem criados usando uma instância-protótipo e cria(clona) uma cópia a partir desse protótipo.

Possui escopo de objeto, então, adiciona ou remove objetos em “tempo de execução”

Page 15: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Singleton

Garante que uma classe tenha somente uma instância e fornece um ponto global de acesso a mesma.

Page 16: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Termos estudados

• Escopo• Princípios

• Aberto/fechado, preferir composição, Dependência, programe para interfaces e encapsule o que varia.

• Orientação•Padrões de criação

•Abstract Factory, builder, factory method, prototype e singleton.

Page 17: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Adapter Bridge Composite Decorator Façade Flyweight Proxy

Padrões estruturais

Page 18: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Adapter(Wrapper)

Converte interface de uma classe em outra interface, esperada pelo cliente.O Adapter permite que interfaces incompativeis trabalhem em conjunto.

OBS: O adapter é o único padrão estrutural que trabalha com o ambos os escopos(Classe e objeto)

Page 19: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Bridge(Handle/body)

Desacopla a abstração de sua implementação, de modo que as duas possam variar independentemente.Exemplo: Criar uma aplicação que funcione no windows e no linux.

É indicado quando podemos ter várias implementações possíveis para uma abstração e vc deseja evitar o vínculo entre a abstração e sua da implementação.

Page 20: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Composite

Compor os objetos em uma estrutura de árvore para representar uma hierarquia parte/todo.

Exemplo: Aplicações gráficas que agrupam objetos simples para a partir daí formarem estruturas complexas(Paletas do photoshop ou do MS visio.)

Page 21: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Decorator(Wripper)

Dinamicamente, adiciona nova responsabilidade a objetos

Page 22: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Facede

Fornece uma interface unificada para um conjunto de interfaces de um subsistema.

* É aplicável quando queremos fornecer uma única interface para um subsistema complexo.

* Estruturar subsistemas em camadas.* Reduzir o acoplamento entre clientes e subsistemas.

Page 23: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Flyweight

A intenção é usar o compartilhamento para suportar uma grande quantidade de objetos de granularidade fina.

Use o Flyweight quando a quantidade de objetos foi muito grande.

Page 24: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Proxy

Fornece um substituto(surrogate) ou um marcador da localização de um objeto para controlar o acesso a esse objeto.

Exemplo: quando abrimos o word uma foto que exista na página 2 não precisará ser carregada se nós só precisarmos visualizar a pagina 1. A função do proxy é controlar a criação de objetos no momento que realmente é necessário.

Page 25: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor

Padrões de comportamento

Page 26: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Chain of Responsibility

Evita o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação.Encadear os objetos receptores, passando a solicitação ao longo da cadeia até que algum objeto a trate.A Idéia desse padrão é desacoplar o remetente e receptor, dando a oportunidade a múltiplos objetos para tratar a solicitação.

Page 27: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Command(Action ou transaction)

Encapsular uma solicitação como um objeto, desta forma permitindo que clientes parametrizem diferentes solicitações, enfileirem ou façam o registro (log) de solicitações e suportem operações que podem ser desfeitas.

Page 28: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Interpreter

Dada uma linguagem, defina uma representação para sua gramática.

Page 29: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Iterator(Cursor)

Fornece uma maneira de acessar seqüencialmente os elementos de um objeto.

Page 30: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Mediator

Define um objeto que encapsula como um conjunto de objetos interage.

Ao invés de cada os objetos se comunicarem entre sí, se comunicam com o mediator (Mediador) de forma centralizada, isso diminui o acoplamento de muitos objetos entre sí.

Compare-o como um switch.

Melhor exemplo é o DNS.

Page 31: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Memento(Token)

Sem violar o encapsulamento,captura e externaliza o estado interno de um objeto de modo que ele possa ser restaurado posteriormente.

Pense no memento como, como o recurso de salvar o estágio de um jogo para ser restaurado depois. Ele faz um snapshot do objeto.

Interessante quando queremos implementar recursos de checkpoint e rollback.

Page 32: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Observer (Dependents, Publish-Subscribe)

Define uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes sejam atualizados.

Page 33: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

State

Permite a alteração do comportamento de um objeto quando seu estado interno é modificado.

Page 34: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Strategy(Policy)

Define uma família de algoritmos, encapsula cada um deles para torná-los intercambiáveis, esse padrão permite que o algoritmo varie independente dos clientes que a utilizem.

Lembre-se do princípio: “encapsular o que varia”.

Page 35: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Template method

Define um esqueleto de um algoritmo em uma operação, postergando a operação de alguns passos para subclasses. Esse padrão permite que subclasses redefinam alguns passos sem mudar sua estrutura.

Exemplo: em um algoritmo para fazer chá ou café teríamos o esqueleto de todos os passos comuns para fazer café e chá, deixando para subclasses apenas os passos “Adicione pó de café”, para a subclasse que implemente fazer café, e “Adicione pó de chá”, para a subclasse que implementa fazer chá. É boa prática usar a função “final” do java para evitar que o algoritmo seja alterado por subclasses.

Page 36: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Visitor

Representa uma operação a ser executada sobre os elementos da estrutura de um objeto. Permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera.

Page 37: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

DIVISÃO

Page 38: PADRÕES DE PROJETO.. GRASP (General Responsibility Assignment Software Patterns). GoF(Gang of Four)

Novos princípios

• Dependa de abstrações não de classes concretas.

• Princípio do conhecimento mínimo: “Só fale com seus amigos mais próximos”, Lembre-se do “facade” e do “mediator”

• Princípio Hollywood:”Não nos ligue, nós ligamos pra vc”. Ele evita o colapso de dependências. Faz com que módulos de alto nível controlem quando módulos de baixo nível serão chamados. Ex: Template method, Factory method, Observer.