Você está na página 1de 16

Padres de Software

(Software Patterns)
Cleidson de Souza - cdesouza@ufpa. cdesouza@ufpa.br Departamento de Informtica Universidade Federal do Par

Agenda
! ! ! ! ! ! ! !

Definio Histrico Consideraes Forma de um Padr Padro Exemplo Vantagens Categorias de Padres O Catlogo de Gamma

Exemplos
Padro de Gabriel Idioma de Pree Padres e Estratgias de Coad O Padro de Projeto State de Gamma O padro MVC

! !

Anti-padres Referncias

Definio
!

Definio(2)
!

Padres (...) so um modo de capturar experincias () de modo que outras pessoas possam utiliz-las[Gamma93]. Padres de projeto constituem um conjunto de regras descrevendo como realizar determinadas tarefas no desenvolvimento de software[Pree94].

Apesar das diferentes definies, existe um consenso de que padres so, uma parcela de experincia destilada, descrita como uma soluo para um problema em uma dada situao[Cam96].

Histrico
Este termo surgiu na dcada de 70 atravs do arquiteto Christopher Alexander, que encontrou temas recorrentes na arquitetura e os capturou em descries e instrues que ele chamou de padres. ! Cada padro descreve um problema que ocorre repetidamente em um ambiente, ele descreve o ncleo da soluo do problema, de modo que voc pode usar esta soluo inmeras vezes.
!

Histrico(2)
!

Durante a dcada de 90, os projetistas de software descobriram a idia de Alexander e tem aplicado-a no desenvolvimento de software. Padres de projeto so um meio para representar, registrar e reutilizar microarquiteturas de projeto repetitivas, bem como a experincia acumulada por projetistas durante o desenvolvimento de software.

Histrico(3)
!

Histrico Detalhado
87, Cunningham e Beck: padres (patterns) para Smalltalk ! 91, Jim Coplien: Livro com Idiomas para C++ ! 91, Bruce Andersen OOPSLA workshop ! 93, GoF: Livro sobre Padres para Design ! 94: Primeira Conferncia de Padres PLoP ! 94 em diante: Padres por toda parte !!!
!

Atualmente, ele tem sido amplamente utilizado em todas as fases do desenvolvimento de software: desde a anlise at a implementao.
Padres Padres Padres Padres Padres Etc. de anlise; de projeto; de implementao - idiomas; para hipertexto; para colaborao - CSCW;

Consideraes
Apesar de todos os avanos na tecnologia de software, ou mesmo por causa destes avanos, um problema bsico ainda existe: a comunicao entre pessoas sobre as melhores prticas e solues em Engenharia de Software

Consideraes (2)
!

O conhecimento de projetistas experientes


intangvel e muito valioso Principal Fator para: ! Sucesso: Gerentes e Tcnicos Experientes ! Fracasso: Gerentes e Tcnicos Inexperientes Adquirido lentamente, trabalho duro e persistente

Capturar, comunicar e assimilar elementos deste conhecimento difcil

Observaes
!

Observaes
!

Padres complementam as abordagens correntes. Ou seja, eles podem ser utilizados em conjunto com metodologias de desenvolvimento de SW. Existem padres para cada uma das fases do desenvolvimento: anlise, projeto, implementao, testes, etc. Padres so identificados e no inventados.

No apenas para Orientao Objetos. Por exemplo, podem existir padres para anlise estruturada, etc. De fato, existem padres sobre como organizar uma empresa de desenvolvimento de SW, etc. Utiliza alguns pressupostos bsicos, opostos aos das abordagens tradicionais: considerada uma abordagem humanstica.

Exemplo: Padro MVC


!

Exemplo: Padro MVC


!

O padro MVC (Model-View-Controller) um padro de arquitetura, ou seja, ele indica como deve ser a organizao global do sistema. Ele sugere a separao entre o modelo, a viso e o controle de uma aplicao:
O modelo corresponde s classes do domnio da aplicao. A viso corresponde s classes de interface grfica da aplicao. Finalmente, o controle corresponde as classes que conectam o modelo viso.

O padro indica que as classes do modelo no devem conhecer as classes da viso. Isto diminui o acoplamento entre estes componentes, implicando que podemos mudar a interface do sistema (de grfica para textual, por exemplo) sem afetar as classes do modelo. De maneira anloga, as classes da UI no devem implementar regras de negcio.

Exemplo: Padro MVC


! As

Exemplo: Padro MVC


!

classes de controle so o mecanismo que integra as classes da UI com as classes do modelo. Elas encapsulam como os objetos interagem promovendo um baixo acoplamento entre elas e permitindo que suas implementaes possam ser modificadas independentemente.

As classes de controle contm tipicamente informao de sequenciamento das operaes. Deve-se tomar cuidado, pois as classes de controle NO DEVEM executar tarefas que tipicamente pertenam s outras classes.

Vantagens dos Padres


Constituem uma base de experincia reutilizvel para a construo de software. Eles fornecem um modo de reutilizar o conhecimento (expertise) de projetistas experientes, e com isso facilitam o treinamento de novos desenvolvedores; ! Os padres de projeto formam um vocabulrio comum para os projetistas se comunicarem e para a documentao e explorao das alternativas de projeto;
!

Vantagens dos Padres (2)


Atuam como "blocos de construo" que podem ser utilizados para criar aplicaes mais complexas; ! Reduzem o tempo de aprendizado de bibliotecas de classes e frameworks. Uma vez que um usurio tenha aprendido uma biblioteca, ele pode reutilizar esta experincia para aprender novas bibliotecas;
!

Vantagens dos Padres (3)


!

Forma de um Padro
!

Permitem larga reutilizao de arquiteturas de software, mesmo que a reutilizao de algoritmos, implementaes, interfaces ou projetos detalhados no seja permitida; Reduzem a complexidade do sistema, pois nomeiam e identificam abstraes que esto em um nvel de abstrao acima das classes e instncias;

Um padro apresente quatro elementos essenciais: O Nome do padro; O Problema; Soluo; e Conseqncias

Forma: Nome do padro


!

Forma: O Problema
!

usado para descrever um problema, sua soluo e suas conseqncias. Deste modo, o vocabulrio dos projetistas ampliado, facilitando o desenvolvimento de software, uma vez que existir um vocabulrio comum que permitir a troca de experincia entre projetistas atravs da comunicao das decises de projeto, e facilitar a documentao do sistema.

Descreve quando aplicar o padro. Explica o problema em questo e o contexto. Pode descrever problemas especficos ou genricos. Normalmente, pelo menos dois exemplos so apresentados para cada padro.

Forma: Soluo
!

Forma: Conseqncias
!

Descreve os elementos que formam o padro, seus relacionamentos, responsabilidades e documentao. A soluo apresentada para um problema genrico e uma estrutura geral. Dependendo da categoria do padro, a soluo apresentada de maneira diferente.

So os resultados e decises que a utilizao daquele padro acarretam. A descrio destas conseqncias vital para uma avaliao dos custos e benefcios de um padro e, consequentemente, para auxiliar a deciso sobre sua utilizao. As conseqncias de um padro incluem, por exemplo, seu impacto sobre a flexibilidade, portabilidade e expansibilidade do sistema.

Categorias de Padres
!

Padres de Arquitetura:
!

Padres de projeto possuem diferentes nveis de abstrao e podem auxiliar em todas as fases do ciclo de vida de desenvolvimento. Segundo Buschmann [, 1996], os padres podem ser agrupados em trs categorias, a saber:
Padres de Arquitetura; Padres de Anlise e Projeto; e Idiomas

Expressam um esquema da organizao global da estrutura do sistema. Eles provem um conjunto de subsistemas prdefinidos, especificando os relacionamentos entre eles e estabelecendo regras para esses relacionamentos. Exemplo: Reflexo, Controller). MVC (Model-View-

Padres de Anlise e Projeto


Fornecem um esquema para refinar os subsistemas ou componentes do sistema de software. ! Esses padres possuem um grau de granularidade considerado mdio e so independentes de linguagem de programao. Padres de projeto, geralmente, correspondem a uma abstrao de duas, trs ou um pequeno nmero de classes.
!

Padres de Anlise e Projeto


!

Os padres de projeto mais famosos so os padres de Erich Gamma, Richard Helm, Ralph Johnson, e John Vlissides. Estes autores ficaram conhecidos como Gang of Four (GoF). Estes padres correspondem ao chamado catlogo de padres.
Exemplo: Strategy, State, etc. .

Os padres de Coad so famosos padres de anlise. anlise

Idiomas
!

Idiomas
!

So os padres de nvel mais baixo, especficos para um determinada linguagem de programao. Eles descrevem como implementar aspectos particulares de componentes e dos relacionamentos entre eles usando caractersticas especficas da linguagem alvo.

Alm disso, formam uma base para a padronizao da nomenclatura e da estrutura do cdigo fonte. Sob este ponto de vista, eles agem como diretrizes de projeto ou, ainda, como convenes para o modo de atribuir nomes.

Categorias de Padres
!

Exemplos de Padres
! ! !

Alm desta classificao, os padres podem ser classificados segundo o domnio no qual se aplicam.
Assim, podem existir padres genricos, que podem ser aplicados em diferentes domnios; Mas tambm podem existir padres especficos para determinados domnios como por exemplo, tolerncia a falhas, criptografia, telecomunicaes, etc.

Software Orientado a Objetos (GoF) Organizaes e Processos (James Coplien) Arquitetura de Software (Mary Shaw; e Frank Buschmann et. al.) Programao em Smalltalk (Kent Back) Integridade de Cunningham) Informaes; (Ward

! !

Programao em Java (Doug Lea)

Exemplos de Padres(cont.)
!

O Catlogo de Gamma
a em
Design Patterns: Patterns: Elements of Reusable ObjectOriented Software por Erich Gamma, Gamma, Richard Helm, Helm, Ralph Johnson, e John Vlissides. Vlissides. Addison Wesley 1994.

Patterns para (Anlise) Objetos (Peter Coad)

Orientao

Introduo de Novas Tecnologias Organizaes (Linda Rising e outros) Alexander e Qualidade (Richard Gabriel) de

Software

Patterns para Software para Comunicao em Redes (Douglas Schmidt)

O Catlogo de Gamma
O catlogo de Gamma o exemplo mais famoso de padres de projeto. A partir deste livro, diversos outros trabalhos foram publicados. Este catlogo contm 23 padres. ! Ele baseia-se na experincia obtida pelos autores com diversos frameworks, no quais estruturas de projeto elegantes, flexveis e bem-estruturadas foram identificadas.
!

Forma dos Padres no Catlogo


Nome do Padro e Classificao: o nome do padro e sua classificao so apresentados. ! Inteno: esta seo deve responder s seguintes questes: O que o padro faz? Qual sua razo e sua inteno? Que caractersticas particulares do problema o padro resolve? ! Tambm conhecido como: outros nomes conhecidos para o padro.
!

Forma dos Padres no Catlogo


Motivao: descreve um cenrio com um problema prtico onde o padro utilizado para resolver o problema. ! Aplicabilidade: esta seo deve responder seguinte questo: em que situao o padro pode ser aplicado? ! Estrutura: descreve a representao grfica das classes do padro atravs de uma notao baseada na OMT, alm de diagramas de interao.
!

Forma dos Padres no Catlogo


Participantes: descreve as classes e objetos que participam do padro, alm de suas responsabilidades. ! Colaboraes: descreve como os participantes colaboram para atingir as suas responsabilidades. ! Conseqncias: apresenta os resultados e decises que devem ser tomadas para a implementao do padro de projeto.
!

Forma dos Padres no Catlogo


!

Classificao dos Padres


Escopo vs. Propsito Classe Objeto Criao Factory Method Abstract Factory Builder Prototype Singleton Estrutura Adapter (classe) Adapter (objeto) Bridge Composite Decorator Facade Flyweight Proxy Comportamento Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor

Trechos de Cdigo: fragmentos de cdigo C++ ou Smalltalk que ilustram como o padro pode ser implementado. Usos Conhecidos: exemplos do padro encontrados em sistemas reais. No mnimo dois exemplos de diferentes domnio so apresentados. Padres Relacionados: descreve outros padres relacionados que podem substituir ou complementar o padro que est sendo descrito.

Anti-Padres
!

Concluses
!

Os padres indicam boas estruturas de anlise, projeto ou implementao no desenvolvimento de software. Os anti-padres indicam exatamente o contrrio. O foco dos anti-padres so os erros comuns dos projetistas e as principais falhas que levam ao fracasso no desenvolvimento de software. Livros sobre anti-padres apresentam tambm dicas prticas em como detect-los e como reorganizar o sistema de modo a corrigi-los.

Como ser um bom jogador de xadrez? Primeiro, aprende-se as regras. Depois, estuda-se os exemplos de bons jogadores. Os padres de software implementam a mesma idia para desenvolvimento de software. Desta forma, so uma abordagem bastante promissora para o desenvolvimento de software.

Referncias: Livros
! Livros

Referncias: Internet e Conferncias


http://st.www.cs.uiuc.edu/users/patterns/p atterns.html ! PLoP: Conferncia, EUA. ! EuroPLoP: Conferncia, Europa. ! OOPSLA: Sobre Orientao a Objetos, EUA.
!

do Christopher Alexander ! Gamma et al. Design Patterns: ..., 1994. ! Coplien&Schmidt (eds.) Pattern Languages of Program Design Addison-Wesley, 1995. ! Buschmann et al. Pattern-Oriented Software Architecture, Wiley, 1996.

Referncias: Colunas de Revistas


Coplien, The Colunm Without a Name, C++ Report, 94+ ! R. Gabriel, Critic-at-Large, JOOP, 93-94 ! Vlissides, Pattern Hatching,C++ Report,95+ ! Johnson, Patterns of Thought, ROAD, 94+
! J.

Outras Referncias
Lea, D. Christopher Alexander: An Introduction for Object-Oriented Designers, SEN, 19(1), 1994 ! Brad Appleton, Patterns and Software: Essential Concepts and Terminology,
! !

http://www.enteract.com/~bradapp/docs/patternsintro.html

IEEE Software, janeiro/fevereiro 1997: Object Methods, Patterns, and Architectures


Coplien: Idioms and Patterns as Architectural Literature Kerth and Cunningham: Using Patterns to Improve our Architectural Vision

Times
!

Implementao
1. 2. 3. 4. 5. 6. 7. 8. 9. Cleberson Dedier Diego Ernani Sales Fabio Borges Leonardo Marcio Kuroki Marlos Tacio Adriano aline patricia Amanda billy breno franklin harrison joseane luiz alberto pedro leandro

Observaes
!

Anlise e Interfaces
1. 2. 3. 4. 5. 6. 7. 8. 9. alline lemos alline peixoto Flavia leandro luiz otavio paula danielle Priscila Jose Enderson Reinaldo adailton anderson marcelo marcio braga rafael weverton

Contato:
email: br email: odiney@cei. odiney@cei.ssp. ssp.pa.gov. pa.gov.br telefone no cei: cei: 3259 0555 / 3259 0599 Apresentao: Apresentao: 2 de Fevereiro Entrega: 7 de Fevereiro

Teste
1. 2. 3. 4. 5. 6. 7. 8. 9.

Segunda Chamada
31 de Janeiro Substituio Substituio de notas. Assunto: orientao a objetos + assuntos vistos em sala.

Arquitetos

Exemplos de Padres

Richard Gabriel: Simply Understood Code


Exemplo de um padro bom e humanstico. Intuitivo, mas muito ignorado. ! ... arrange the importante parts of the code so it fits on one page. Make that code understandable to a person reading it from top to bottom. Do not require the code to be repeatedly scanned in order to understand how data is used and how control moves about ...
!

Exemplo: o idioma de Pree


!

Exemplo: o idioma de Pree


!

Pree apresenta uma outra abordagem que se refere a convenes de nomes a serem dados a variveis, constantes e mtodos. O trabalho de Pree baseado nas convenes descritas no framework ET++. A utilizao de convenes de nomenclatura em frameworks importante, pois facilita o aprendizado e utilizao do mesmo.

! !

Nomes de classes e de mtodos: devem iniciar com letras maisculas seguidos de letras minsculas. Variveis locais devem iniciar com letras minsculas. Se um nome consiste de vrias palavras, a segunda e as palavras subsequentes iniciam com letras maisculas, como por exemplo DoLeftButtonDownCommand(...). Variveis globais: devem iniciar com o prefixo g, como: gFileDialog, gApplication.

Exemplo: o idioma de Pree


Constantes: devem iniciar com o prefixo c, como: cldNone. ! Mtodos: quando definem o valor de uma varivel instanciada devem iniciar com Set, como em SetSaldo(..). Mtodos que retornam tais valores devem iniciar com Get, como GetOrigin(...). ! Mtodos que desenham objetos na tela devem iniciar com Gr, como GrPaintRect(). ! Etc...
!

Exemplo: A abordagem de Coad


A abordagem de Coad para padres de software divide-se na apresentao de estratgias e de padres propriamente ditos. ! Coad apresenta 177 estratgias e 31 padres, que so mais adequados a fase de anlise. Entretanto, Coad no faz nenhuma distino sobre quando os padres podem ser aplicados.
!

Exemplo: A abordagem de Coad


!

Exemplo: A abordagem de Coad


!

Uma estratgia um plano de ao que deve ser utilizado para alcanar determinados objetivos durante a realizao das atividades de construo do modelo de objetos. Um padro um bloco de construo til para o desenvolvimento de software orientado a objetos.

As estratgias esto categorias, a saber:

divididas

em

Atividades e Componentes do Modelo Identificar o propsito e caractersticas do sistema Selecionar objetos Estabelecer Responsabilidades Construir cenrios Descobrir novas estratgias e padres

Exemplo: A abordagem de Coad


!

Exemplo: A abordagem de Coad


!

Exemplo de uma Estratgia para Identificao de Objetos. Estratgia Nmero 13: Selecionar Atores.

Exemplo de Padro: Transao - Item de Transao Transao

Procurar por atores, que so pessoas e organizaes que atuam como participantes no sistema em construo. ! Exemplos: pessoa, organizao (agncia, companhia, corporao, fundao, etc.).
!

Exemplo: Padro State


!

Exemplo: Padro State


!

O padro de projeto State apresenta uma soluo genrica para o problema de modelagem de objetos que apresentam diferentes estados ``lgicos' e tambm comportamentos variados dependendo do estado lgico corrente.

O padro define uma hierarquia de estados paralela hierarquia de classes e o objeto da aplicao delega as operaes dependentes de estado para um objeto representando o seu estado corrente. Em tempo de execuo o objeto da aplicao pode mudar seu estado lgico, implicando tambm numa alterao em seu comportamento.

Exemplo: Padro State

Você também pode gostar