MAC 441/5714 - Programação Orientada a Objetos
Aula 19 - 25/5/05
Padrões de Projeto de Software - continuação
State (305) - Behavioral
- slides do Joe (pag. 26)
- quando usamos o State, parece que o objeto "muda de classe"
à medida em que seu estado muda.
- exemplo do GoF:
- TCPConnection
cujo estado pode ser TCPEstablished,
TCPListen ou TCPClosed.
- ver diagrama na pág. 305.
- outro caso de uso são programas para desenhos: HotDraw do Johnson e Unidraw do Vlissides
- ver diagrama na pág. 313.
Façade (185) - Structural
- descrição do Joe é muito sucinta, ver
também GoF (185..193)
- exemplo da pág. 186 é o jeito que o compilador do ObjectWorks
Smalltalk funciona.
- exemplo do sistema operacional Choices no GoF é bem interessante (pag. 192)
Mediator (273) - Behavioral
- Objetivo: definir um objeto que encapsula dentro de si o modo
como um conjunto de objetos interage.
- promove baixo acoplamento fazendo com que os objetos não
interajam entre si diretamente.
- o mediador se torna a parte não reutilizável mas
todo o resto fica mais reutilizável
- O exemplo do Joe (pag. 50) com InsurancePolicy, Worker e CustomerHistory mediados por um
Procedure é
muito bom.
- Sem o Procedure, os
objetos do domínio teriam que interagir entre si diretamente e o
sistema resultante seria bem menos flexível.
- Ajuda a separar um sistema em processos de negócio e em
objetos do domínio.
Iterator (257) - Behavioral
- Objetivo: prover uma forma de acessar os elementos de um agregado
seqüencialmente 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.
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.
- Estrutura: GoF pag. 236. (caso específico, não
mostrar necessariamente)
- Usos: undo, logs, 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
Referência básica
Referências online
- Slides
do curso de padrões dado pelo Joe Yoder no IME em 2003
- Página
dos cursos dados pelo Joe Yoder incluindo
o vídeo das palestras!
Vários lugares da Web contém uma
documentação muito boa sobre os padrões GoF.
Próxima Aula
Aula
Anterior
Página de MAC 441/5714
Página do Fabio
Página do DCC