1
Padrões - introdução
O que é um padrão?
“Each pattern describing a problem which occurs over
and over again in our environment, and then
describes the core of the solution to that problem, in
such a way that you can use this solution a million
times over, withough ever doing the same way twice”
(Christopher Alexander- “A pattern language”).
2
Padrão - 4 elementos essenciais
• Nome
• Problema (descrição)
• Solução (Descrição abstrata)
–
–
–
–
elementos
relações
colaborações
responsabilidades
• Conseqüências
– resultados, vantagens, desvantagens (questões de linguagem,
tempo, impacto na flexibilidade, extensibilidade, portabilidade)
3
Descrevendo um padrão- 1
• Nome e classificação
– bom nome é essencial
– "criacional", estrutural (composição de objetos),
comportamental (responsabilidades, interação)
• Propósito
– o que faz? qual o propósito? qual o problema que é
resolvido?
• Outros Nomes
• Motivação
– um exemplo que ilustra o problema e como ele é
resolvido pelo padrão
4
Descrevendo um padrão - 2
• Aplicabilidade
– quando podemos aplicar? que exemplos de má
arquitetura ele resolve?
• Estrutura
– representação gráfica das classes envolvidas
• Participantes
– classes e objetos envolvidos e suas responsabilidades
• Colaborações
5
Descrevendo um padrão - 3
• Conseqüências
– como o padrão resolve o problema? quais são as vantagens e
desvantagens?
• Implementação
– quais os cuidados? dicas? existem questões específicas para
algumas linguagens?
• Exemplo de código
• Usos conhecidos
• Padrões relacionados
– quais padrões são semelhantes? quais as diferenças importantes?
quais outros padrões devem ser utilizados conjuntamente?
Desenho de Aplicações
Orientadas a Objeto (como
padrões podem ajudar?)
• Encontrar os objetos apropriados
–
–
–
–
Objeto: dados + operações
nomes + verbos
colaborações e responsabilidades
modelar mundo real (Ruim - nem todos os objetos tem
similar)
– Padrões ajudam a encontrar abstrações não triviais
• Determinar granularidade (como decidir?) (e.g..
“Factory”)
6
7
Desenho OO - especificação de
interfaces
•
•
•
•
Interface: conjunto de assinaturas
Tipo ~ Interface (supertipo, subtipo)
Interface != Implementação
Padrões
– identificam elementos chaves das interfaces
– tipos de dados enviados pelas interfaces
– o que não colocar em uma interface (e.g. 2 interfaces,
cópia e guardar estado)
– restrições a interfaces (classes que devem ter interfaces
semelhantes)
8
Desenho OO - reutilização herança vs. composição
• caixa branca vs. caixa preta
• mais funcionalidade por código vs. por
composição
• estático vs. dinâmico
• facilidade de modificação vs. modularidade
e encapsulamento
• menos objetos vs. menos classes
• Favorecemos Composição
9
Desenho OO -reutilização delegação
• composição tão poderosa como herança
• análogo a subclasse deixar requisição para ser
tratada por superclasse
– ex. janela delega cálculo de área para retângulo
• Cuidados
–
–
–
–
necessário passar objeto original como parâmetro
"software" altamente parametrizado difícil de escrever
utilizar apenas quando simplifica desenho
deve fazer parte de desenho altamente abstrato
10
Desenho OO - reutilização - tipos
parametrizados
• templates (C++), generics (Ada, Eiffel)
• define tipo sem especificar todos os tipos
que ele utiliza
• versões específicas são criadas para cada
parâmetro
11
Desenho OO - reutilização exemplo
• Algoritmo de ordenação, comparação
– implementada por subclasses (herança)
– responsabilidade do objeto a ser ordenado
(delegação)
– argumento de uma “template” (parametrização)
12
Desenho OO - reutilização diferenças
• Composição de Objetos menos eficiente,
mais dinâmico
• Herança e Parametrização mais eficientes,
estáticas
• Parametrização inexiste em linguagens sem
tipos estáticos (não é necessária)
13
Desenho OO - prevendo
mudanças
• Padrões podem ajudar a desenvolver sistemas mais
tolerantes a mudanças eles podem ajudar de varias
maneiras
• Padrões para criação indireta de objetos, impedem
associação a uma classe específica (Abstract Factory,
Factory Method, Prototype)
• Evitar associar satisfação de tarefa a implementação
específica (Chain of Responsability, Command)
• Evitar dependências com plataformas (Abstract Factory,
Bridge)
14
Desenho OO - prevendo
mudanças - 2
• Evitar dependências com implementações ou representações
específicas de objetos (Abstract Factory, Bridge, Memento, Proxy)
– Evitar dependências em relação a algoritmos específicos (Builder, Iterator,
Strategy, Template Method, Visitor)
• Evitar “tight-coupling” (classes com interdependência forte, onde uma
não pode ser entendida sem saber o funcionamento da outra) (Abstract
Factory, Bridge, Chain of Responsability, Command, Façade,
Mediator, Observer)
• Extensão de funcionalidade por composição e não por subclasseamento (Bridge, Chain of Responsibility, Composite, Decorator,
Observer, Strategy)
• Moficar classes “difíceis” (e.g. não temos o código fonte) (Adapter,
Decorator, Visitor)
15
Padrões não são caixas de
ferramentas (toolkits)
• caixas de ferramentas são bibliotecas de
aplicativos que podem ser utilizados dentro
de uma aplicação
• caixas de ferramentas são conjuntos de
aplicativos com função genérica
• generalidade como em padrões, mas
implementação específica e maior escopo
16
Padrões não são “frameworks”
• função inversa a das caixas de ferramentas:
conjunto de classes cooperantes para o qual
o usuário escreve os aplicativos auxiliares
• todas as aplicações geradas têm a mesma
estrutura, como em padrões
• diferentemente de padrões
– especificação de padrões é mais abstrata
– padrões são unidades menores
– padrões são menos especializados
17
Selecionando um padrão
• importante conhecer conjunto de padrões e
sua inter-relação
• isolar variabilidade no problema tratado
• selecionar padrões com a motivação correta
(intent)
• entender padrões com função semelhante
• tentar evitar causas de reengenharia
utilizando padrões que as combatem
18
Utilizando um padrão
• estudar padrão em detalhe para compreender
responsabilidades e colaborações
• escolher nomes adequados para os participantes
que reflitam sua utilização no domínio escolhido
(nomes ruins indicam classes mal definidas)
• definir as classes
• definir nomes para operações que sejam
adequados ao domínio do problema
• implementar as operações
19
Exemplo de aplicabilidade Model View Controller
• Em Smalltalk aplicações que utilizam interfaces visuais
utilizam o modelo MVC
– Modelo representa os dados
– View representa a(s) aparência(s) visual(is)
– Controler represnta como o aplicativo reage a ações do usuário
• MVS separa estes elementos para criar um modelo padrão
de interface e para possibilitar uma maior modularidade
nos projetos de interface
• Models e Views podem ser independentes porque se
comunicam por uma interface padrão de “notificação” e
“assinatura”
20
MVC um exemplo:
• diagrama
21
MVC e padrões
• apesar de MVC se destinar especificamente à
criaçao de interfaces, este desenho que separa o
modelo de sua representação externa reflete um
princípio mais geral onde a modificação de um
objeto (modelo) pode refletir em vários outros (as
representações). Este princípio é descrito pelo
padrão “Observer”
22
MVC e padrões - 2
• em MVC as representações (“View”) podem ser
encaixadas. Por exemplo um painel de controle
pode ser visto como uma representação composta
de sub-representações (botões, graficos). Este tipo
de desenho é descrito pelo padrão “Composite”.
23
MVC e padrões - 3
• finalmente, em MVC podemos mudar a maneira
pela qual um aplicativo responte à entrada do
usuário mantendo seu modelo e sua represntação
mas mudando o componente controlador. Este tipo
de relação é descrita pelo padrão “Strategy”.
Download

Introd