MAC 441/5714 - Programação Orientada a Objetos
Aula 18 - 18/5/5
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 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 implementacao quando se tem
varios subtipos de um singleton eh a criacao de um diretorio (registry)
de singletons que mapeia nomes (strings) dos objetos a referencias aos
singletons. Desta forma, em tempo de execucao, podemos escolher o
singleton apropriado baseado em algum arquivo de configuracao ou algum
menu da interface grafica.
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: criação de um mesmo arquivo em formatos
diferentes (RTF, PDF, TXT, DOC, etc.)
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 após a prova
- 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 das palestras!
Vários lugares da Web contém uma
documentação muito boa sobre os padrões GoF.
Página de MAC 441/5714
Página do Fabio
Página do DCC