MAC 441/5714 - Programação Orientada a Objetos
Aula 20
Quase terminando com os Padrões de Projeto de Software
"Os
últimos serão os primeiros".
alguém que estava em último
Last but not least - vamos terminar de ver (quase) todos os padrões do GoF hoje.
Iterator (257) - Behavioral
- Objetivo: prover uma forma de acessar os elementos de um agregado sequencialmente sem expor sua representação interna.
- Também conhecido como: Cursor
- Exemplo concreto na página 258 do GoF
- Estrutura genérica na página 259 do GoF
- Usos conhecidos: coleções em Smalltalk; posteriormente adotadas em C++ STL e em Java.
- Em Smalltalk podemos usar iteradores implicitamente (através, por exemplo do Collection>>do:) ou explicitamente através de
Streams que oferecem uma interface no estilo de iteradores.
- Um tutorial online muito bom sobre o padrão Iterator
Memento (283) - Behavioral
- Objetivo: Sem violar encapsulamento, capturar e externalizar o estado interno de um objeto de forma a restaurar este estado posteriormente.
- Também conhecido como: Token
- Estrutura: GoF pag. 285.
- Usos conhecidos: undo, migração de objetos, persistência e recuperação, etc.
Command (233) - Behavioral
- Objetivo: Encapsular uma requisição como um objeto permitindo que as requisições sejam enfileiradas, registradas, desfeitas, etc.
- Também conhecido como: Action, Transaction.
- Exemplos: Gimp ou Photoshop. GoF pag. 234 e 235.
- Usos: undo, logs, menus, distribuição de tarefas, etc.
Moral da História: padrões de projeto servem de proteção contra mudanças
- Se é provável que algo no sistema irá mudar, faça dele um objeto
- Strategy: mudança de um algoritmo
- State: mudança de comportamento
- Iterator: mudança da forma de se percorrer os elementos de uma coleção
- Façade: mudanças em subsistemas
- Mediator: mudança nas interações entre objetos
- Factory: mudança nos produtos que são gerados
Agora sim, completando todos os padrões:
Adapter (139) - Estrutural
- objetivo: converter a interface de uma classe em uma outra interface que é esperada por um cliente.
- também conhecido como: Wrapper
- permite que classes incompatíveis sejam colocadas para trabalhar em conjunto
- exemplo simplezinho: adaptar a interface de um vetor para prover uma interface tipo pilha (push/pop)
Bridge (151) - Estrutural
- objetivo: desacoplar uma abstração de sua implementação de forma que as duas coisas possam variar independentemente.
- leva a duas hierarquias de classes gêmeas: a da abstração e a da implementação.
- Segundo o Joe Yoder, é um dos padrões de projeto menos usados.
- Se você conhecer um exemplo interessante onde este padrão é útil, mande para mim.
- Um tutorial online muito bom sobre o padrão Bridge
Decorator (175) - Estrutural
- Objetivo: adicionar novas responsabilidades a um objeto dinamicamente.
- Decoradores oferecem uma alternativa mais flexível para herança. Pode ser usado para adicionar funcionalidades a objetos individuais ao
invés da classe inteira.
- também conhecido como: Wrapper
- exemplo do GoF: em um editor de textos onde o texto é mostrado por aTextView que é decorado por um aScrollDecorator
que é decorado por um aBorderDecorator
- outro exemplo bem interessante do GoF: Stream do ET++ nas páginas 183 e 184.
Referência básica
Referências online
Vários lugares da Web contém uma documentação muito boa sobre os padrões GoF.
Aula anterior
Próxima aula
Página de MAC 441/5714
Página do Fabio
Página do DCC