Padrões - introdução

23
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”).

description

Padrões - introdução. O que é um padrão? - PowerPoint PPT Presentation

Transcript of Padrões - introdução

Page 1: Padrões - introdução

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”).

Page 2: Padrões - introdução

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)

Page 3: Padrões - introdução

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

Page 4: Padrões - introduçã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

Page 5: Padrões - introdução

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?

Page 6: Padrões - introdução

6Desenho 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”)

Page 7: Padrões - introdução

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)

Page 8: Padrões - introdução

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

Page 9: Padrões - introduçã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

Page 10: Padrões - introdução

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

Page 11: Padrões - introdução

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)

Page 12: Padrões - introduçã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)

Page 13: Padrões - introdução

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)

Page 14: Padrões - introdução

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 sub-classeamento (Bridge, Chain of Responsibility, Composite, Decorator, Observer, Strategy)

• Moficar classes “difíceis” (e.g. não temos o código fonte) (Adapter, Decorator, Visitor)

Page 15: Padrões - introdução

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

Page 16: Padrões - introdução

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

Page 17: Padrões - introdução

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

Page 18: Padrões - introdução

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

Page 19: Padrões - introdução

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”

Page 20: Padrões - introdução

20

MVC um exemplo:

• diagrama

Page 21: Padrões - introdução

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”

Page 22: Padrões - introdução

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”.

Page 23: Padrões - introdução

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”.