MAC 441/5714 - Programação Orientada a Objetos
Aula 18 - 3/6/8
Padrões de Projeto de Software - continuação
Singleton (127) - padrão de Criação de objetos
- em alguns casos queremos ter apenas uma instância de uma classe
- um SO tem apenas 1 Window Manager
- um sistema de folha de pagamento cuida de apenas 1 empresa
- um sistema de matrícula cuida de apenas 1 universidade
- um jogo de xadrez possui apenas 1 tabuleiro
- etc., etc.
- queremos também que essa instância seja facilmente acessível de qualquer ponto
- alternativas (ruins)
- variável global
- classe cheia de métodos de classe (estáticos)
- solução
- Singleton: a própria classe é responsável por gerenciar sua única instância
- veremos implementações em C++, Java e Smalltalk.
- uma alternativa interessante de implementação quando se tem vários subtipos de um singleton é a criação
de um diretório (registry) de singletons que mapeia nomes (strings) dos objetos a referências aos singletons. Desta forma, em tempo
de execução, podemos escolher o singleton apropriado baseado em algum arquivo de configuração ou algum menu da interface
gráfica.
Builder (97) - padrão de Criação de objetos
- deve ser usado quando o processo de criação de um objeto é muito complicado e exige vários passos.
- desacopla o processo de criação do objeto, do objeto em si.
- o padrão permite que um mesmo algoritmo de criação seja usado para criar/construir várias coisas de tipos diferentes
- exemplo do GoF: criação de um mesmo arquivo em formatos diferentes (RTF, PDF, TXT, DOC, etc.). Ver diagrama de seqüência.
Composite (163) - padrão Estrutural
- Objetivo: compor objetos em árvores representando hierarquias todo-parte. Permite que clientes tratem objetos individuais e
composições de objetos da mesma forma.
- Usos conhecidos: compiladores, interpretadores, interfaces gráficas, controle de estoque, etc.
- exemplo do Yoder: contêiners de Java
Strategy (315) - padrão Comportamental
- Objetivo: definir uma família de algoritmos, encapsular cada um deles em uma classe e torná-los intercambiáveis. Estratégia
permite que o algortimo varie independentemente dos clientes que o utilizam.
- Strategy é uma alternativa a herança
- Usos conhecidos: verificação ortográfica multi-lingüe, separação silábica, highlight de
documentos no Emacs, sistemas adaptativos, algoritmos de ordenação, etc.
Template Method (325) - padrão Comportamental
- definição de classes abstratas com métodos concretos que apresentam uma receita de bolo chamando outros métodos abstratos
- são as subclasses concretas que definem que tipo de bolo será criado.
- no exemplo do Yoder note como o View "obriga" suas subclasses a sempre chamar o setFocus antes e o resetFocus depois.
Outros Padrões importantes que veremos nas próximas aulas:
- Adapter
- Bridge
- Decorator
- Façade
- Chain of Responsibility
- Command
- Mediator
- Observer
- State
- Visitor
- na verdade, vale a pena ler o livro inteiro!!!
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 da
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