Escolar Documentos
Profissional Documentos
Cultura Documentos
(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)
!
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.
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.
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.
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: 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-
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. .
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
! !
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.
Orientao
Introduo de Novas Tecnologias Organizaes (Linda Rising e outros) Alexander e Qualidade (Richard Gabriel) de
Software
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.
!
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
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.
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
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
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.
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.
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 de uma Estratgia para Identificao de Objetos. Estratgia Nmero 13: Selecionar Atores.
Procurar por atores, que so pessoas e organizaes que atuam como participantes no sistema em construo. ! Exemplos: pessoa, organizao (agncia, companhia, corporao, fundao, etc.).
!
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.