• Nenhum resultado encontrado

Intro&Singleton

N/A
N/A
Protected

Academic year: 2021

Share "Intro&Singleton"

Copied!
9
0
0

Texto

(1)

Padrões de Projeto

(Design Patterns)

Fábio Gondim Período: 2010.1 2

(Design Patterns)

Peça Rei Rainha Torre Bispo Cavalo Peão

Quantidade 1 1 2 2 2 8

Símbolo

Conhecer as peças, tabuleiro e regras do jogo de xadrez não são suficientes para definir um grande jogador.

3

Padrões de Projeto

(Design Patterns)

Conhecer e compreender as técnicas, estratégias e jogadas dos grandes mestres é recomendável.

4

Padrões de Projeto

(Design Patterns)

Conhecer a sintaxe, semântica, estruturas e regras de uma linguagem orientada a objetos não é suficiente para definir um bom projetista.

abstract continue for new switch assert*** default goto* package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum**** instanceof return transient catch extends int short try char final interface static void class finally long strictfp** volatile

const* float native super while

Padrões de Projeto

(Design Patterns)

Conhecer e compreender as técnicas, estratégias e soluções dos grandes projetistas é recomendável.

Padrões de Projeto

(Design Patterns)

Padrão segundo o dicionário Aurélio:

...aquilo que serve de baseou norma para a

avaliação de qualidade ou quantidade...

... qualquer objeto que serve de modeloà

feitura de outro ...

...modelo, exemplo, protótipo, arquétipo...

(2)

7

O que é um padrão de projeto?

 Idéia vem da área de arquitetura (1979)

“A importância de padrões na criação de sistemas complexos foi há muito tempo reconhecida em outras disciplinas. Christopher Alexander e seus colegas foram, talvez, os primeiros a propor a idéia de usar uma linguagem de padrões em projetos de edificações e cidades”

(Grady Booch)

8

O que é um padrão de projeto?

“Cada padrão descreve um problema no

nosso ambiente e o cerne da sua solução, de tal forma que você possa usar essa solução milhões de vezes, sem nunca fazê-lo da mesma maneira”

(Christopher Alexander, sobre padrões em Arquitetura)

9

Padrões de Projeto

(Design Patterns)

Existem problemas em software que

ocorrem repetidamente e que poderiam

ser resolvidos, em certa medida, da

mesma maneira

?

(Alan Shalloway & James R. Trott)

10

Padrões de Projeto

(Design Patterns)

Seria possível projetar software em

termos de padrões, criando soluções

específicas baseadas nesses padrões

somente depois que eles tivessem sido

identificados

?

(Alan Shalloway & James R. Trott)

11

Padrões de Projeto

(Design Patterns)

 Idéia transportada para software em um livro

clássico:

Padrões de Projeto

Soluções reutilizáveis de software orientado a objetos Escrito por: Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides(que ficaram conhecidos como a Gangue dos Quatro (The Gang of Four – GoF)

12

Padrões de Projeto

(Design Patterns)

“É importante compreender que os autores não criaram os padrões descritos no livro; ao contrário, eles os identificaram como já existentes na comunidade de software – padrões que refletiam o que havia sido aprendido sobre projetos de alta qualidade para problemas específicos”

(3)

13

O que é um padrão de projeto?

"Os padrões de projeto são descrições de objetos e classes comunicantes que precisam ser personalizadas para resolver um problema geral de projeto em um contexto particular”

(Gamma, Helm, Johnson & Vlissides)

14

O que é um padrão de projeto?

“Os padrões de projeto são abstrações de alto nível, que documentam soluções bem-sucedidas de projeto. Eles são fundamentais para o reuso de projetos no desenvolvimento orientado a objetos.”

(Ian Sommerville)

15

Padrões de Projeto

(Design Patterns)

O que é um padrão de projeto?

“Os padrões de projeto são combinações de

classes e algoritmos associados que cumprem com os propósitos comuns de projeto. Um padrão de projeto expressa uma idéia em vez de uma combinação fixa de classes. Os algoritmos associados expressam a operação básica do padrão.”

(Eric Braude)

16

Padrões de Projeto

(Design Patterns)

“Um padrão de projeto nomeia, abstrai e identifica os aspectos chaves de uma estrutura comum para torná-la útil para a criação de um projeto orientado a objeto reutilizável. O padrão de projetos identifica as classes e instâncias participantes, seus papeis, colaborações e a distribuição de responsabilidades.

(...)

Padrões de Projeto

(Design Patterns)

Cada padrão de projeto focaliza um problema ou tópico particular de projeto orientado a objetos. Ele descreve em que situação pode ser aplicado, se ele pode ser aplicado em função de outras restrições de projeto e as conseqüências, custos e benefícios de sua utilização.”

(Gamma, Helm, Johnson & Vlissides)

Padrões de Projeto

(Design Patterns)

Quais os seus benefícios?

 Descrevem e justificam soluções para problemas de

projeto orientado a objetos que foram previamente testadas e aprovadas.

“Padrões mostram como construir sistemas com boas qualidades de design OO.”

“Padrões são uma experiência orientada a objeto comprovada”

(4)

19

Quais os seus benefícios?

 Permitem compartilhar experiências bem sucedidas

na resolução de problemas.

“Uma coisa que os melhores projetistas sabem que não devem fazer é resolver cada problema a partir de princípios elementares ou do zero. Em vez disso, eles reutilizam soluções que funcionaram no passado. Quando encontram uma boa solução eles a utilizam repetidamente.”

(Gamma, Helm, Johnson & Vlissides)

20

Quais os seus benefícios?

 Permitem compartilhar experiências bem sucedidas

na resolução de problemas.

“Se não conhece padrões, você tem menos probabilidade de desenvolver projetos excelentes.

Padrões capturam sabedoria. Reusar essa sabedoria é extremamente útil.”

(Joshua Kerievsky)

21

Padrões de Projeto

(Design Patterns)

Quais os seus benefícios?

 Tornam mais fácil reutilizar projetos e arquiteturas

bem sucedidas

“Muitas pessoas podem compreender conceitos como objetos, interfaces, classes e herança. O desafio reside em aplicá-los à construção de software flexível e reutilizável, e os padrões de projeto podem mostrar como fazê-lo.”

(Gamma, Helm, Johnson & Vlissides)

22

Padrões de Projeto

(Design Patterns)

Quais os seus benefícios?

 Estabelecem um vocabulário de alto nível para

discussão sobre projeto de software:

“Quando você se comunica com outro desenvolvedor ou com sua equipe usando padrões, está

comunicando não apenas um nome de padrão, mas um conjunto inteiro de qualidades, características e restrições que o padrão representa”

(Eric Freeman & Elisabeth Freeman, 2005)

23

Padrões de Projeto

(Design Patterns)

“Padrões fornecem uma linguagem

compartilhada que pode maximizar o

valor de sua comunicação com outros

desenvolvedores”

(Eric Freeman & Elisabeth Freeman, 2005)

24

Padrões de Projeto

(Design Patterns)



Em geral, um padrão tem quatro

elementos essenciais:

1.O nome do padrão;

2.O problema;

3.A Solução;

(5)

25



O nome do padrão:

É uma referência que podemos utilizar

para descrever um problema de projeto, suas soluções e conseqüências em uma ou duas palavras.

26



O problema:

Descreve em que situação aplicar o

padrão. Ele explica o problema e seu contexto. Algumas vezes, o problema incluirá uma lista de condições que devem ser satisfeitas para que faça sentido aplicar o padrão.

27

Padrões de Projeto

(Design Patterns)



A solução:

Descreve os elementos que compõem o

padrão de projetos, seus relacionamentos, suas responsabilidades e colaborações.

28

Padrões de Projeto

(Design Patterns)

A solução não descreve um projeto

concreto ou implementação em particular porque um padrão é como um gabarito que pode ser aplicado em muitas situações diferentes. Em vez disso, o padrão fornece uma descrição abstrata de um problema de projeto e de como um arranjo geral de elementos (classes e objetos, no nosso caso) o resolve.

Padrões de Projeto

(Design Patterns)



As conseqüências:

São os resultados e análises das vantagens

e desvantagens da aplicação do padrão (são críticas para a avaliação de alternativas de projetos e para

compreensão dos custos e benefícios da aplicação do padrão).

Padrões de Projeto

(Design Patterns)

Uma vez que a reutilização é

freqüentemente um fator no projeto orientado a objetos, as conseqüências de um padrão incluem o seu impacto sobre a flexibilidade, a extensibilidade ou a portabilidade de um sistema.

(6)

31



Descrevendo os padrões de projeto:

Os padrões GOF são descritos de acordo

com um gabarito que fornece uma estrutura uniforme às informações, tornando os padrões de projeto mais fáceis de aprender, comparar e usar.

32



Gabarito:

Nome e classificação do padrão; Intenção e objetivo;

Também conhecido como; Motivação; Aplicabilidade; Estrutura; 33

Padrões de Projeto

(Design Patterns)



Gabarito (continuação):

Participantes; Colaborações; Conseqüências; Implementação; Exemplo de código; Usos conhecidos; Padrões relacionados. 34

Padrões de Projeto

(Design Patterns)

 Exemplo de um padrão: Singleton.

Nome: SINGLETON

Classificação: Criação de objetos

35

Padrões de Projeto

(Design Patterns)



Motivação

Algumas classes devem ser instanciadas

uma única vez:

Um spooler de impressão; Um gerenciador de janelas;

Um objeto que contém a configuração de um

programa;

Etc.

36

Padrões de Projeto

(Design Patterns)

 Como assegurar que uma classe possua

apenas uma instância e que esta instância seja facilmente acessível?

 Uma variável global deixa a instância acessível

mas não inibe a instanciação múltipla.

 Uma melhor solução: faça com que a classe em si

seja responsável pela manutenção da instância única. Este é o padrão Singleton.

(7)

37



Aplicabilidade

 Use o padrão Singleton quando:

For preciso haver apenas uma instância de uma

classe, e essa instância tiver que dar acesso aos clientes através de um ponto bem conhecido.

A única instância tiver de ser extensível através

de subclasses, possibilitando aos clientes usar uma instância estendida sem alterar o seu código. 

Estrutura

39

Padrões de Projeto

(Design Patterns)



Participantes

Singleton

Define uma operação getInstance() que

permite que clientes acessarem sua única instância (getInstance é uma operação de classe o que significa que em java ele deve ser um método estático).

Pode ser responsável pela criação de sua

própria instância única.

40

Padrões de Projeto

(Design Patterns)



Colaborações

Os clientes acessam uma instância

Singleton unicamente pela operação getInstance() do Singleton.



Conseqüências

O padrão Singleton apresenta vários

benefícios:

Padrões de Projeto

(Design Patterns)

 Acesso controlado à instância única. Como a

classe Singleton encapsula a sua única instância, possui controle total sobre como e quando os clientes a acessam.

 Espaço de nomes reduzido. O padrão

Singleton representa uma melhoria em relação ao uso de variáveis globais. Ele evita a poluição do espaço de nomes com variáveis globais que armazenam instâncias únicas

Padrões de Projeto

(Design Patterns)

 Permite um refinamento de operações e da

representação. A classe Singleton pode ter

subclasses e é fácil configurar uma aplicação com uma instância dessa classe estendida. Você pode configurar a aplicação com uma instância da classe de que necessita em tempo de execução.

(8)

43

 Permite um número variável de instâncias. O

padrão torna fácil mudar de idéia, permitindo mais de uma instância da classe Singleton. Além disso você pode utilizar a mesma abordagem para controlar o número de instâncias que a aplicação utiliza. Somente a operação que permite acesso à instância de Singleton necessita ser mudada.

44



Mais flexível do que operações de

classe (métodos estáticos).

Embora

possa parecer que podemos fazer o

equivalente a um Singleton com

métodos estáticos, lembre que isso

não permitiria o polimorfismo.

45

Padrões de Projeto

(Design Patterns)

 Implementação

 Como assegurar que haja uma única instância?

Uma forma é não permitir chamadas ao construtor. public class Config implements ConfigIF {

private static ConfigIF instânciaÚnica = null; private Config() {}

// o compilador não vai gerar um construtor default público

public static ConfigIF getInstance() { if(instânciaÚnica == null) {

// "lazy instantiation“

instânciaÚnica = new Config(); } return instânciaÚnica; }

46

Padrões de Projeto

(Design Patterns)



Usos conhecidos e padrões relacionados

Muitos padrões podem ser implementados

usando Singleton. Alguns exemplos são Abstract Factory, Builder e Prototype.

47

Padrões de Projeto

(Design Patterns)

 Exercício

 Crie uma classe Highlander que implemente o padrão Singleton.

(Lembram do filme Highlander onde os personagens diziam que só podia haver um?)

 Crie uma classe Teste que crie duas referências para um objeto

Highlander utilizando o método getInstance() e que comprove que elas apontam para o mesmo objeto.

 Tente instanciar um objeto Highlander na classe Teste e verifique

que o código não compila.

 Acrescente o modificador synchronized ao método

getInstance() da classe HighLander. O que significa esta alteração?

48

Padrões de Projeto

(Design Patterns)



Bibliografia

BRAUDE, Eric. Projeto de Software. Bookman, 2005; FREEMAN, Eric, FREEMAN, Elizabeth. Use a Cabeça!

– Padrões de Projeto. Alta Books, 2005;

GAMMA, E., HELM, R., JOHNSON, R. e VLISSIDES, J.

Padrões de Projeto – Soluções reutilizáveis de software orientado a objetos. Bookman, 1995;

KERIEVSKY, JOSHUA. Refatoração para Padrões.

(9)

49



Bibliografia

LARMAN, Craig. Utilizando UML e Padrões. 2ª ed.

Bookman, 2002;

SHALLOWAY, Alan; TROTT, James. Explicando

Padrões de Projeto – Uma Nova Perspectiva em Projeto Orientado a Objeto. Bookman, 2004;

SOMMERVILLE, Ian. Engenharia de Software. 6ª

Referências

Documentos relacionados

(...) só num terminamos que ela [primeira companheira] já tava sendo punida por demais pela atitude que fez...eu até hoje não consegui entender que motivos que ela tinha pra não

Se a pessoa do marketing corporativo não usar a tarefa Assinatura, todos as pessoas do marketing de campo que possuem acesso a todos os registros na lista de alvos originais

Copyright © 2002-2007 Rossana Andrade Slide 34 Um Exemplo de um bom Padrão (Cont.) Solução (Cont.). – Defina o protocolo entre os dois objetos- metade de tal forma que ele coordene as

Problemas causados: magoa as pessoas através das suas piadas, não se esforça para realizar suas. tarefas em

Segundo o DSM-IV, o indivíduo com delirium apresenta-se como perturbação da consciência e redução da atenção, de instalação aguda (horas a dias), com flutuações ao

A colisão dos continentes durante o período Permiano (cerca de 275 milhões de anos atrás) para formar uma única e gigantesca massa de terra chamada Pangéia , causou

Em uma abordagem interdisciplinar a prática da terceirização das atividades laborais pode ser correlacionada ao Território, ao Direito e à Administração, sendo utilizada de forma

O papel do Fundecitrus foi decisivo para a construção da posição ostentada pelo Brasil, inclusive pelo trabalho do inventário das árvores e a robusta metodologia de estimativa