MAC 441/5714 - Programação Orientada a Objetos
Aula 21
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.
Proxy (207) - Estrutural
- Objetivo: provê um objeto intermediário que permite controlar o acesso ao objeto original.
- exemplo do GoF: na pág. 208, um ImageProxy controla o acesso a uma imagem
- usos: remote proxy (para objetos em outro espaço de endereçamento), virtual proxy (para objetos pesados que não são carregados
na memória quando não são necessários), protection proxy (para controlar quem pode e quem não pode acessar o objeto original,
e.g.: KernelProxy no Choices controla as chamadas ao sistema operacional) e smart references (podem ser usadas para contagem de referências, carga em
memória sob demanda ou controle de concorrência (locks)).
Chain of Responsibility (223) - Comportamental
- Objetivo: desacoplar o emissor de uma requisição de seu receptor dando a mais de um objeto a oportunidade para processá-la.
- Cria-se uma cadeia de objetos receptores e a requisição vai sendo passada de um a outro até que alguém a processe.
- Exemplo do GoF na página 223: tratamento do evento Help numa aplicação de janelas.
- dizemos que a requisição (ou mensagem) tem um destinatário implícito.
- Padrão relacionado: é implementado frequentemente junto com o Composite.
Interpreter (243) - Comportamental
- Objetivo: dada uma linguagem, define uma representação para sua gramática juntamente com um interpretador que usa essa
representação para interpretar sentenças na linguagem.
- Usos: implementação de compiladores, implementação de processadores de XML, interpretadores de comandos (shell),
etc.
- Maiores detalhes: na disciplina de Compilação.
Visitor (331) - Comportamental
- Objetivo: Representar uma operação a ser realizada nos elementos de uma estrutura de objetos.
- Permite definir uma nova operação sem mudar as classes dos elementos nos quais ele opera.
- Exemplo do Gof: página 332: NodeVisitor e subclasses TypeCheckingVisitor e CodeGenerationVisitor. Em Java,
poderíamos falar ainda de um nível a mais na hierarquia: BytecodeGenerationVisitor e NativeCodeGenerationVisitor.
- Padrões relacionados: muitas vezes o visitante é usado para percorrer os elementos de um Composite; o visitante pode realizar a
interpretação no padrão Interpreter.
- Usos conhecidos: o compilador do Smalltalk-80 usa um Visitor para analisar código-fonte; ele poderia também ser usado para gerar
código, formatar, colorir, etc. É usado em outros contextos, por exemplo toolkits para geração de
gráficos 3D. As ações do software no mundo tridimensional podem ser executadas por visitantes.
Prototype (117) - de Criação
Factory Method (107) - de Criação
Flyweight (195) - Estrutural
Três coisas interessantes da Web:
Moral da História:
- use e abuse dos padrões
- mas com moderação e criteriosamente
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.
Aula anterior
Próxima aula
Página de MAC 441/5714
Página do Fabio
Página do DCC