Académique Documents
Professionnel Documents
Culture Documents
So Carlos 2001
Padres de Software
SUMRIO
1 INTRODUO .......................................................................................................................................... 1 2 CONCEITOS & TERMINOLOGIA BSICOS...................................................................................... 3 2.1 ORIENTAO A OBJETOS........................................................................................................................ 3 2.1.1 Introduo ...................................................................................................................................... 3 2.1.2 Classes e instncias ........................................................................................................................ 4 2.1.3 Atributos e Mtodos........................................................................................................................ 5 2.1.4 Generalizao, especializao e Agregao .................................................................................. 6 2.1.5 Classes Abstratas X Classes Concretas.......................................................................................... 7 2.1.6 - Herana........................................................................................................................................... 8 2.1.7 Encapsulamento e Mensagens........................................................................................................ 8 2.1.8 Polimorfismo .................................................................................................................................. 9 2.1.9 Mtodos de Anlise e Projeto OO ............................................................................................... 10 2.2 REUSO .................................................................................................................................................. 10 2.2.1 Bibliotecas de classes ................................................................................................................... 11 2.2.2 Frameworks.................................................................................................................................. 12 2.2.3 Geradores de Aplicao e Toolkits............................................................................................... 12 3. PADRES................................................................................................................................................... 13 3.1 COMPONENTES DE UM PADRO ............................................................................................................ 14 3.2 ANTI-PADRES ..................................................................................................................................... 16 3.3 COMPARAO ENTRE PADRES E OUTRAS FORMAS DE REUSO ............................................................. 16 4 CLASSIFICAO DE PADRES ........................................................................................................ 18 5 COLETNEAS DE PADRES .............................................................................................................. 19 5.1 INTRODUO........................................................................................................................................ 19 5.2 CONCEITOS & TERMINOLOGIA ............................................................................................................. 20 5.2.1 Colees de padres..................................................................................................................... 20 5.2.2 Catlogos de padres ................................................................................................................... 20 5.2.3 Sistemas de padres...................................................................................................................... 20 5.2.4 Linguagens de padres................................................................................................................. 21 5.3 SNTESE DE TRABALHOS AFINS ............................................................................................................. 22 5.4 EXEMPLOS............................................................................................................................................ 24 5.4.1 Colees de padres..................................................................................................................... 24 5.4.2 Catlogos de padres ................................................................................................................... 25 5.4.3 Sistemas de padres...................................................................................................................... 27 5.4.4 Linguagem de padres.................................................................................................................. 29 6 ESCRITA E USO DE PADRES........................................................................................................... 33 6.1 REGRAS PARA DERIVAO DE NOVOS PADRES ................................................................................... 33 6.2 DESENVOLVIMENTO DE SISTEMAS USANDO PADRES .......................................................................... 33 6.3 EXERCCIOS .......................................................................................................................................... 34 7 CONCLUSES ........................................................................................................................................ 35 REFERNCIAS: ............................................................................................................................................ 35
ANEXO: NOTAO UML (UNIFIED MODELING LANGUAGE)....................................................... 39 A1 BREVE HISTRICO ................................................................................................................................ 39 A2 NOTAO ............................................................................................................................................. 40 A2.1 Diagramas de Caso de Uso (Use Cases).................................................................................. 43 A2.2 Diagramas de Classes.................................................................................................................. 44
ndice de Figuras
Figura 1 Abordagem da Orientao a Objetos ................................................................................................ 3 Figura 2 Classe e Objetos ................................................................................................................................ 5 Figura 3 Atributos e Mtodos.......................................................................................................................... 6 Figura 4 Generalizao/Especializao ........................................................................................................... 7 Figura 5 Agregao ......................................................................................................................................... 7 Figura 6 Classes Abstratas e concretas............................................................................................................ 8 Figura 7 Relacionamento entre padres [Gamma 95] ................................................................................... 27 Figura 8 Estrutura da Linguagem de Padres apresentada graficamente ...................................................... 30 Figura 16 Exemplo de elementos genricos .................................................................................................. 42 Figura 17 Representao grfica de alguns elementos de modelagem da UML ........................................... 43 Figura 18 Exemplo de package ..................................................................................................................... 43 Figura 19 - Exemplo de Um Diagrama de Caso de Uso................................................................................... 44 Figura 20 - Representao de uma Classe. ....................................................................................................... 45 Figura 21 - Exemplo de Type (Tipo). ............................................................................................................... 46 Figura 22 - Exemplo de Associao. ................................................................................................................ 46 Figura 23 - Exemplo de Associao do tipo or. ............................................................................................ 46 Figura 24- Exemplo de relacionamentos de composio e agregao.............................................................. 46 Figura 25- Exemplo de relacionamentos de Generalizao.............................................................................. 47 Figura 26 - Exemplo de relacionamentos de Dependncia............................................................................... 47
ndice de Tabelas
Tabela 1 Coleo de Padres [Vlissides 96].................................................................................................. 24 Tabela 2 Catlogo de Padres [Gamma 95] .................................................................................................. 26 Tabela 3 Sistema de Padres [Buschmann 96].............................................................................................. 29 Tabela 4 Padres da Linguagem e propsitos ............................................................................................... 31
1 Introduo
O reuso de software um tema da engenharia de software que tem recebido destaque especial nas ltimas dcadas. O objetivo reaproveitar grande parte do software produzido e informaes associadas em projetos futuros, diminuindo o custo e aumentando a produtividade no desenvolvimento e na prpria evoluo do produto. A idia bsica de que componentes de software sejam projetados e implementados de forma que possam ser reusados em muitos sistemas diferentes. Na dcada de 60, construam-se bibliotecas de sub-rotinas cientficas que eram reusveis em aplicaes cientficas e de reengenharia, sendo portanto de um domnio de aplicao limitado. Geradores de aplicao ou geradores de programa surgiram logo depois para facilitar a criao de aplicaes a partir de sua especificao em uma linguagem de alto nvel. Apesar dos geradores de aplicao limitarem-se a poucos domnios, eles representam a preocupao com o reuso nos diferentes nveis do processo de desenvolvimento de software. Eles foram pioneiros em propiciar o reuso de anlise, mais especificamente atravs da anlise de domnios. A abordagem de desenvolvimento de software orientado a objetos traz consigo grande motivao e nfase no reuso de software. Nessa perspectiva, padres de software tm sido pesquisados na ltima dcada como uma forma promissora de reuso, no somente de cdigo mas tambm de projeto, anlise, arquitetura e processo de desenvolvimento. Por intermdio dos padres podem ser documentadas solues para diferentes tipos de problemas que ocorrem ao longo do processo de desenvolvimento de software. Essas solues, quaisquer que sejam seus nveis de abstrao, podem ser reusadas por outros desenvolvedores ao confrontarem-se com problemas similares. Diversos padres tm sido propostos, seja para solucionar problemas de programao [Coplien 92], de projeto [Gamma 95, Pree 95] e de anlise [Coad 92, Coad 95, Fowler 97], entre outros. Conferncias internacionais para apresentao e discusso de novos padres assim como linguagens de padres tm ocorrido desde 1994. Uma srie de livros rene os melhores artigos apresentados nessas conferncias [Coplien 95, Vlissides 96, Martin 98], nos quais podem ser encontrados padres das mais variadas classes. Padres de padro tm sido propostos sugerindo os componentes bsicos e opcionais que podem compor um padro [Gamma 95, Appleton 97, Buschmann 96].
1
Estas notas didticas destinam-se a dar uma viso atual sobre padres de software, discutindo em detalhes as diversas classes de padres, bem como exemplificando seu uso em casos reais. As notas didticas esto organizadas da seguinte forma. No Captulo 2 so apresentados os conceitos e terminologia necessrios para o entendimento dos demais captulos. No Captulo 3 so apresentadas as definies de padres, seus diversos componentes e feita uma comparao entre padres e outras formas de reuso. No Captulo 4 mostra-se a classificao de padres de acordo com seu nvel de abstrao. No Captulo 5 discutem-se as diversas formas de agrupamento de padres em conjuntos, que so: catlogos de padres, sistemas de padres e linguagens de padres. No Captulo 6 so fornecidas diretrizes para escrita e uso de padres. No Captulo 7 so apresentadas as concluses e sintetizados os principais questionamentos e desdobramento de pesquisas na rea. No apndice A dado um breve histrico e um resumo da notao UML, utilizada para representao dos padres no decorrer das notas didticas.
Mundo Real
Gap Semntico
Mundo Computacional
ESPAO DE SOLUES
A representao de objetos em um software mais natural do que a representao de sua funcionalidade, que tende a sofrer constantes mudanas. Representar a funcionalidade do sistema a base do paradigma de orientao a procedimentos enquanto representar os objetos do sistema a base do paradigma da orientao a objetos. Uma das grandes vantagens da orientao a objetos de que nela o espao de solues est mais prximo (conceitualmente) do espao de problemas. Assim, mais fcil desenvolver a aplicao e assegurar sua compreenso, confiabilidade e manuteno. A compreenso dos conceitos e o rigor no desenvolvimento persistem como questes fundamentais nesse contexto. A programao orientada a objetos foi discutida pela primeira vez no final da dcada de 60 por aqueles que trabalhavam na linguagem Simula. Nos anos 1970 foi desenvolvida na Xerox PARC uma parte importante da linguagem Smalltalk [Coad 91], que combina a noo de classes da linguagem Simula com grande parte da essncia de abstrao funcional da linguagem LISP, embora sejam linguagens bastante diferentes [Graham 94]. A programao orientada a objetos levou alguns anos para amadurecer. O interesse cada vez maior pelo desenvolvimento de interfaces com o usurio e as pesquisas relacionando a orientao a objetos inteligncia artificial, computao concorrente e ao gerenciamento de banco de dados motivaram o aperfeioamento das linguagens orientadas a objeto. Isso levou necessidade de desenvolver mtodos para anlise e projeto orientado a objetos, que comearam a surgir no final da dcada de 80. Dentre esses mtodos, destacam-se os abordados em [Masiero 98], mais especialmente o mtodo Fusion [Coleman 94], que se props a ser uma fuso de alguns dos ento existentes e a UML [Eriksson 98], que almeja constituir uma notao unificada para todos os mtodos da orientao a objetos. 2.1.2 Classes e instncias A categorizao dos objetos em grupos e/ou classes, baseada em propriedades comuns, um dos princpios mais importantes do paradigma orientado a objetos; por exemplo, os objetos "Fiat Uno Placa: AAA-4444 Cor: Prata" e "Volkswagen Gol Placa: FFF-3333 Cor: Vinho" fazem parte da classe "Automveis" e possuem propriedades comuns, tais como marca, modelo, placa, cor etc. Nesse caso, consideramos que "Fiat Uno
Placa: AAA-4444 Cor: Prata" e "Volkswagen Gol Placa: FFF-3333 Cor: Vinho" so instncias, ou objetos, da classe "Automvel" (Figura 2).
Objetos
Figura 2 Classe e Objetos
Classe
2.1.3 Atributos e Mtodos Os atributos so as propriedades da classe comuns a todos seus objetos ou instncias. Em geral, os atributos so de uso exclusivo de cada classe, no podendo haver acesso a eles por objetos de outras classes; por exemplo, a classe Automvel possui atributos Marca, Modelo, Placa e Cor. Os mtodos so procedimentos que atuam sobre um objeto ou sobre uma classe de objetos. Eles descrevem uma seqncia de aes a ser executada por um objeto, podendo fazer consultas ou alteraes nos atributos desse objeto ou criar novos objetos. Atravs dos mtodos especifica-se a um objeto COMO FAZER alguma coisa. Os mtodos so intrnsecos s classes e no podem ser separados; por exemplo, a classe Automvel possui mtodos Registrar, Eliminar, AlterarPlaca, etc. (Figura 3).
Atributos
Mtodos
2.1.4 Generalizao, especializao e Agregao Os conceitos de generalizao e especializao so decorrentes do conceito de classes: a partir de duas classes pode-se abstrair uma classe mais genrica. As subclasses satisfazem todas as propriedades das classes de que elas constituem especializaes. Deve existir pelo menos uma propriedade que diferencie duas classes especializadas; por exemplo, a partir de duas classes Automvel e Caminho pode-se criar a generalizao Veculo, que possui todos os atributos comuns entre as especializaes Automvel e Caminho (Figura 4). Nesse caso, diz-se que Veculo a superclasse (generalizao) e que Automvel e Caminho so subclasses (especializaes). A agregao ou decomposio consiste na composio de uma nova classe como um agregado de classes preexistentes. frequentemente referida por relacionamento todoparte, no qual o agregado (todo) composto de partes [Cook 94]; por exemplo, na Figura 5 a classe Diviso agregada classe Companhia, o que significa que cada diviso parte de uma nica companhia. A companhia formada por suas divises e se a companhia for destruda, assim o sero suas divises. A notao utilizada na Figura 5 a UML [Eriksson 98], resumida no apndice A.
Superclasse
Veculo
Marca/modelo Placa Cor
Subclasse Automvel
Capacidade de passageiros
GENERALIZAO
ESPECIALIZAO
Caminho
Capacidade de carga
( herana )
Figura 5 Agregao
2.1.5 Classes Abstratas X Classes Concretas Uma classe abstrata uma classe que nunca possui instncias. Apenas suas subclasses podem possuir instncias. Em geral, a raiz de uma hierarquia de classes abstrata, enquanto as folhas so classes concretas. As classes abstratas definem seus mtodos em termos de outros mtodos indefinidos que precisam ser implementados por suas subclasses concretas; por exemplo, a classe Coleo define mtodos como Selecione, Recupere, Inclua, etc. em termos de um mtodo de iterao Faa. Suas subclasses Matriz, Conjunto e Dicionrio definem o mtodo Faa e assim podem usar os mtodos herdados de Coleo (Figura 6). Nesse caso, o mtodo Faa reescrito em cada uma das subclasses concretas, enquanto os mtodos Selecione, Recupere e Inclua so mtodos definidos apenas na classe abstrata e herdados pelas subclasses. Nada impede que uma das classes especialize um dos mtodos da classe. A classe Coleo nunca possui instncias: as instncias so sempre de umas das subclasses concretas Matriz, Conjunto ou Dicionrio.
Coleo
Classe abstrata
Classes concretas
Matriz Faa
Conjunto Faa
2.1.6 - Herana A herana um mecanismo que permite definir uma nova classe (subclasse) a partir de uma classe j existente (superclasse). Ao se estabelecer uma Especializao (subclasse) de uma classe, a subclasse herda as caractersticas comuns da superclasse, isto , os atributos e mtodos da superclasse passam a fazer parte da especificao dos atributos e dos mtodos da subclasse. A subclasse pode adicionar novos mtodos, como tambm reescrever mtodos herdados (em ingls, override). Na Figura 6, as subclasses Matriz, Conjunto e Dicionrio herdam os mtodos Selecione, Recupere e Inclua da superclasse Coleo e reescrevem o mtodo Faa. A classe Dicionrio reescreve tambm o mtodo Selecione. 2.1.7 Encapsulamento e Mensagens Na orientao a objetos, as estruturas de dados ou atributos das classes ficam encapsuladas, ou seja, s podem ser manipuladas pelos prprios mtodos da classe. O objeto possui uma parte privada (Viso Interna) e uma parte compartilhada (Viso Externa ou Interface). O encapsulamento restringe a visibilidade do objeto mas facilita o reuso, pois
os atributos e os mtodos so empacotados sob um nome e podem ser reusados como uma especificao ou componente de programa. A passagem de mensagens o mecanismo atravs do qual os objetos se comunicam, invocando as operaes desejadas. As operaes ou mtodos que podem ser invocados por outras classes fazem parte da interface ou viso externa da classe. A interface especifica quais operaes sobre os objetos da classe podem ser realizadas, mas no como a operao ser executada. 2.1.8 Polimorfismo Ao receber uma mensagem para efetuar uma operao, o objeto quem determina como a operao deve ser efetuada, pois ele tem comportamento prprio. Como a responsabilidade do receptor e no do emissor, pode acontecer que uma mesma mensagem ative mtodos diferentes, dependendo da classe de objetos para onde enviada a mensagem. Esse mecanismo chamado de polimorfismo e possvel graas ao recurso de ligao dinmica (em ingls, dynamic binding). Por meio do polimorfismo, possvel criar vrias classes com interfaces idnticas, porm com objetos e implementaes diferentes. Assim, uma mensagem pode ser executada de acordo com as caractersticas do objeto que est recebendo o pedido de execuo do servio; por exemplo, o operador + um exemplo clssico do polimorfismo mesmo nas linguagens mais antigas: ele usado tanto com parmetros numricos quanto com parmetros do tipo caracter ou outros. Outro exemplo de polimorfismo uma lista genrica que pode conter elementos de qualquer tipo (como inteiros, strings, arrays, etc.). Na interface da lista h mtodos para manipulao de todos os seus possveis tipos de elementos. O nome dos mtodos sempre o mesmo para uma mesma operao e o polimorfismo permite que o mtodo correto seja executado de acordo com o tipo de parmetro passado.
2.1.9 Mtodos de Anlise e Projeto OO Alm da programao orientada a objetos, difundida no incio da dcada de 80 pelo surgimento de linguagens como Smalltalk e Ada, diversos mtodos de anlise e projeto orientado a objetos tm sido propostos nos ltimos anos, entre eles:
CRC (Class Responsability Collaborator, Beecke e Cunningham, 1989) OOA (Object Oriented Analysis, Coad e Yourdon, 1990) Booch (Booch, 1991) OMT (Object Modeling Technique, Rumbaugh, 1991) Objectory (Jacobson, 1992) Fusion (Coleman e outros, 1994)
O objetivo desses mtodos tornar a anlise compatvel com a codificao do software, o que no seria efetivo se mtodos baseados em outros paradigmas fossem aplicados. Em 1997 diversos autores, preocupados com a grande quantidade de notaes diferentes para representao de software orientado a objetos, propuseram uma notao universal, chamada UML (Unified Modeling Language) [Eriksson 97]. Essa notao, resumida no Apndice, ser utilizada no decorrer deste trabalho para representar os diversos diagramas relativos aos padres.
2.2 Reuso
O reuso uma atividade que se destina a identificar software reutilizvel, envolvendo tambm a correta importao, reconfigurao e adaptao desse software para uma nova aplicao. A grande motivao para o reuso a necessidade de aumento de produtividade, manutenibilidade e qualidade tanto do software quanto de seu processo de desenvolvimento. O ganho na produtividade se deve ao fato de que o reuso reduz a quantidade de cdigo a ser programada, testada e documentada, diminuindo tambm o custo do produto. A manutenibilidade melhorada pois o entendimento do sistema como um todo fica mais fcil, j que componentes projetados para reuso tambm tm funo bem
10
definida e os programadores encontram-se mais familiarizados com os blocos reutilizados. A qualidade de um software projetado para reuso em geral maior do que a de um software desenvolvido normalmente, pois em geral h um investimento maior no projeto, documentao e testes. Componentes reusveis devem ser catalogados para que possam ser facilmente consultados, padronizados para facilitar a aplicao e validados para que sua integrao seja fcil [Pressman 95]. O processo de identificao do componente a ser reutilizado chamado de recuperao de informao. A falta de componentes reusveis, a dificuldade para encontrar um componente e modific-lo so os grandes entraves ao reuso. Alm disso, o custo para construo desses componentes maior, pois necessrio investir mais no planejamento, documentao e testes. Outro problema que desmotiva o reuso a ineficincia dos componentes, que ocorre quando tenta-se fazer componentes mais genricos para servir a uma gama maior de reutilizadores. Nesses casos, muitos desenvolvedores preferem desenvolver seu prprio componente, para que o desempenho seja mximo. O sucesso da implantao do reuso depende de trs fatores bsicos: atitude, ferramentas e tcnicas [Johnson 88]. A atitude que deve ser tomada envolve a conscientizao da equipe da necessidade de reuso. Muitas vezes, por comodidade ou por receio de utilizar programas alheios, prefere-se desenvolver um componente novamente. Essa uma atitude que deveria ser ponderada nas empresas. Ferramentas de auxlio ao reuso so fundamentais: elas auxiliam na busca, armazenagem e recuperao dos componentes. Tcnicas para reuso tambm so necessrias para seu sucesso: regras para projeto e codificao de componentes reusveis aumentam a facilidade de entendimento e conseqentemente o reuso de um componente. 2.2.1 Bibliotecas de classes Com a efetivao do paradigma da orientao a objetos o reuso passou a ser no somente de cdigo mas passou a abranger as estruturas de dados. Bibliotecas de classes passaram a ser criadas para resolver problemas das mais diversas reas: sistemas operacionais, computao grfica, interfaces, banco de dados, etc. A modularidade e ocultamento de informao oferecidos pelas classes facilitam extremamente o reuso. Alm
11
disso, a herana faz com que a classe possa ser reusada criando-se as especializaes desejadas e o polimorfismo faz com que os mtodos funcionem para uma variedade maior de argumentos. A disponibilizao de bibliotecas de classes aos desenvolvedores permite que eles usem a herana a fim de particularizar as classes abstratas de acordo com o caso especfico. Por exemplo, em Smalltalk existe uma biblioteca de classes para tratar de colees, que permitem a manipulao de colees de objetos tais como matrizes, dicionrios, conjuntos, etc. Cada componente dessa biblioteca pode ser usado como parte da soluo para um problema maior [Johnson 88]. 2.2.2 Frameworks Aps a popularizao da linguagem Smalltalk, no incio da dcada de 80, paralelamente s bibliotecas de classes, comearam a ser construdos frameworks de aplicao, que acrescentam s bibliotecas de classes os relacionamentos e interao entre as diversas classes que compem o framework. Com os frameworks, reutilizam-se no somente as linhas de cdigo, como tambm o projeto abstrato envolvendo o domnio de aplicao. Framework definido por Coad como um esqueleto de classes, objetos e relacionamentos agrupados para construir aplicaes especficas [Coad 92] e por Johnson como um conjunto de classes abstratas e concretas que prov uma infra-estrutura genrica de solues para um conjunto de problemas [Johnson 88]. Essas classes podem fazer parte de uma biblioteca de classes ou podem ser especficas da aplicao. Frameworks possibilitam reutilizar no s componentes isolados, como tambm toda a arquitetura de um domnio especfico. O Captulo 15 explica em detalhes os conceitos associados a frameworks, exemplificando diversos deles. 2.2.3 Geradores de Aplicao e Toolkits Geradores de aplicao so ferramentas de apoio por computador ao desenvolvimento de software. Alm de reduzir os custos e aumentar a produtividade, eles ajudam a melhorar a qualidade dos sistemas produzidos. Essencialmente, um gerador de aplicao um utilitrio que, a partir de uma especificao de alto nvel de um problema
12
implementvel, transforma automaticamente essa especificao na implementao do problema [Meira 91, Masiero 93]. No contexto de orientao a objetos e frameworks, toolkits so ambientes de construo de aplicaes orientadas a objetos, sendo constitudos por ferramentas de alto nvel que permitem aos usurios interagirem com um framework de aplicao para configurar e construir novas aplicaes [Johnson 88].
3. Padres
A origem dos padres de projeto deu-se com o trabalho feito pelo arquiteto Christopher Alexander no final dos anos 70. Ele escreveu dois livros: A Pattern Language [Alexander 77] e A Timeless Way of Building [Alexander 79] que, alm de exemplificarem, descrevem seu mtodo para documentao de padres. O trabalho de Alexander, apesar de ser voltado para a arquitetura, possui uma fundamentao bsica que pode ser abstrada para a rea de software. Os padres permaneceram esquecidos por um tempo, at que ressurgiram na conferncia sobre programao orientada a objetos (OOPSLA) de 1987, mais especificamente, no Workshop sobre Especificao e Projeto para Programao Orientada a Objetos [Beck 87]. Nesse trabalho, Beck e Cunningham falam sobre uma linguagem de padres para projetar janelas em Smalltalk. A partir de ento, muitos artigos, revistas e livros tm aparecido abordando padres de software, que descrevem solues para problemas que ocorrem freqentemente no desenvolvimento de software e que podem ser reusadas por outros desenvolvedores. Um dos primeiros trabalhos estabelecendo padres foi o de Coad [Coad 92], no qual so descritos sete padres de anlise. Nesse mesmo ano Coplien publicou um livro definindo inmeros idiomas, que so padres de programao especficos para a linguagem C++. Em 1993, Gamma e outros introduzem os primeiros de seus vinte e trs padres de projeto [Gamma 93], que seriam publicados em 1995 [Gamma 95]. Esses foram os trabalhos pioneiros na rea de padres, seguidos por muitos outros nos anos seguintes. Um padro descreve uma soluo para um problema que ocorre com freqncia durante o desenvolvimento de software, podendo ser considerado como um par problema/soluo [Buschmann 96]. Projetistas familiarizados com certos padres podem
13
aplic-los imediatamente a problemas de projeto, sem ter que redescobri-los [Gamma 95]. Um padro um conjunto de informaes instrutivas que possui um nome e que capta a estrutura essencial e o raciocnio de uma famlia de solues comprovadamente bem sucedidas para um problema repetido que ocorre sob um determinado contexto e um conjunto de repercusses [Appleton 97]. Padres de software podem se referir a diferentes nveis de abstrao no desenvolvimento de sistemas orientados a objetos. Assim, existem padres arquiteturais, em que o nvel de abstrao bastante alto, padres de anlise, padres de projeto, padres de cdigo, entre outros. As diversas categorias de padres so discutidas no Captulo 3. O uso de padres proporciona um vocabulrio comum para a comunicao entre projetistas, criando abstraes num nvel superior ao de classes e garantindo uniformidade na estrutura do software [Gall 96]. Alm disto, eles atuam como blocos construtivos a partir dos quais projetos mais complexos podem ser construdos [Gamma 95].
Name: Todo padro deve ter um nome significativo. Pode ser uma nica palavra
ou frase curta que se refira ao padro e ao conhecimento ou estrutura descritos por ele. Se o padro possuir mais do que um nome comumente usado ou reconhecvel na literatura, subsees Aliases ou Also know as devem ser criadas.
14
Rationale: Uma explicao das regras ou passos do padro que explicam como
e porque ele trata suas influncias contrrias, definidas em 'Forces', para alcanar os objetivos, princpios e filosofia propostos. Isso nos diz realmente como o padro funciona, porque funciona e porque ele bom.
padres
codependentes,
que
podem
(ou
devem)
ser
aplicados
3.2 Anti-padres
Anti-padres representam uma lio aprendida, ao contrrio dos padres, que representam a melhor prtica [Appleton 97]. Os anti-padres podem ser de dois tipos: Aqueles que descrevem uma soluo ruim para um problema que resultou em uma situao ruim Aqueles que descrevem como escapar de uma situao ruim e como proceder para, a partir dela, atingir uma boa soluo. Os anti-padres so necessrios porque to importante ver e entender solues ruims como solues boas. Se por um lado til mostrar a presena de certos padres em sistemas mal sucedidos, por outro lado til mostrar a ausncia dos anti-padres em sistemas bem sucedidos. Segundo uma outra definio [CMG 98] um anti-padro : um padro que diz como ir de um problema para uma soluo ruim ou um padro que diz como ir de uma soluo ruim para um soluo boa.
A primeira parece intil, exceto se considerarmos o padro como uma mensagem No faa isso. O segundo definitivamente um padro positivo, no qual o problema a soluo ruim.
(pode-se dizer que frameworks tm natureza fsica enquanto que padres tm natureza lgica). Os padres so menores do que frameworks. Em geral padres so compostos por 2 ou 3 classes, enquanto os frameworks envolvem um nmero bem maior de classes, podendo englobar diversos padres. Os padres so menos especializados do que frameworks, j que os frameworks geralmente so desenvolvidos para um domnio de aplicao especfico e os padres (ou muitos deles) podem ser usados em diversos tipos de aplicao. Apesar de haver padres mais especializados, eles no so capazes de ditar a arquitetura de uma aplicao, ao contrrio dos frameworks.
17
4 Classificao de Padres
Conforme mencionado no Captulo 1, padres de software abrangem diferentes nveis de abstrao, podendo portanto ser classificados em diversas categorias de modo a facilitar sua recuperao e uso. Porm, essa classificao no rigorosa, podendo haver padres que se encaixem em mais do que uma categoria. A seguir resumem-se algumas categorias importantes de padres, que so detalhadas posteriormente nos Captulos 4 a 13. Outras categorias de padres so discutidas em [Coplien 95, Vlissides 96, Martin98].
Padres de projeto: definem solues para problemas de projeto de software. Padres de interface: definem solues para problemas comuns no projeto da
interface de sistemas. um caso particular dos padres de projeto.
Padres de Persistncia: descrevem solues para problemas de armazenamento de informaes em arquivos ou bancos de dados.
18
5 Coletneas de padres
5.1 Introduo
Conforme j mencionado no Captulo 1, diversos autores tm proposto centenas de padres nas mais diversas reas de aplicao. Esses padres so descobertos aps a abstrao de fatores comuns em diversos pares problema-soluo, podendo-se situar em vrias faixas de escala e abstrao. Existem padres de domnio especfico, como por exemplo para sistemas multimdia educativos (ver captulo 10) e tambm padres independentes de domnio, como por exemplo padres para projeto de interface. H padres que ajudam a estruturar um sistema de software em subsistemas e outros que ajudam a implementar aspectos de projeto particulares. Olhando mais de perto para muitos padres, percebe-se que um padro resolve um problema, mas sua aplicao pode gerar outros problemas, que podem ser resolvidos por outros padres. Em geral no existem padres isolados: um padro pode depender de outro no qual esteja contido, ou das partes que ele contm, ou ser uma variao de outro, ou ser uma combinao de outros. De maneira geral, um padro e seus variantes descrevem solues para problemas muito similares, que variam em algumas das influncias envolvidas. Portanto, deve-se pensar em formas de agrupar os padres existentes segundo algum critrio, de forma a facilitar sua recuperao e reuso. Isso pode ser feito por meio de colees de padres, catlogos de padres, sistemas de padres ou linguagem de padres. Este captulo tm por objetivo fornecer os conceitos relacionados a esses quatro tipos de agrupamento de padres, bem como exemplific-los, deixando clara a diferena entre eles e a utilidade de cada um deles em particular.
19
Um sistema de padres interliga padres individuais, descreve como os padres que o constituem so conectados com outros padres no sistema, como esses padres podem ser implementados e como o desenvolvimento de software com padres apoiado. Um sistema de padres um veculo poderoso para expressar e construir arquiteturas de software [Buschmann 96]. Alm da estrutura e organizao oferecidas por um catlogo de padres, num sistema de padres adicionada uma maior profundidade estrutura, maior riqueza interao dos padres e maior uniformidade ao catlogo de padres [Appleton 97].
5.2.4 Linguagens de padres Uma linguagem de padres uma coleo estruturada de padres que se apoiam uns nos outros para transformar requisitos e restries numa arquitetura [Coplien 98]. Os padres que constituem uma linguagem de padres cobrem todos os aspectos importantes em um dado domnio. Pelo menos um padro deve estar disponvel para cada aspecto da construo e implementao de um sistema de software: no pode haver vazios ou brancos. Uma linguagem de padres uma forma de subdividir um problema geral e sua soluo complexa em um nmero de problemas relacionados e suas respectivas solues. Cada padro da linguagem resolve um problema especfico no contexto comum compartilhado pela linguagem. importante notar que cada padro pode ser usado separadamente ou com um certo nmero de padres da linguagem. Isso significa que um padro sozinho considerado til mesmo se a linguagem no for ser usada em sua plenitude. Meszaros e Doble [1998] propem uma linguagem de padres para auxiliar na escrita de padres. Ela possui uma sub-seo dedicada a padres a serem seguidos por linguagens de padres, dentre os quais padres especificando que uma linguagem de padres deve: dar ao leitor uma viso geral da linguagem de padres, fornecer uma tabela resumindo todos os padres, deixar claro quando houver formas alternativas para resolver o mesmo problema, deixar clara a estruturao da linguagem, utilizar um mesmo exemplo em
21
toda a linguagem para ilustrar cada padro e oferecer um glossrio de termos como parte da linguagem.
Deve apoiar sua prpria evoluo: assim como a evoluo tecnolgica, um sistema de padres deve evoluir tambm. Assim, deve ser permitida a modificao de padres existentes, a melhoria de sua descrio, a adio de novos padres e a retirada de padres no mais utilizados
Riehle e Zllighoven [Riehle 95] apresentam uma linguagem de padres chamada A Pattern Language for Tool Construction and Integration Based on the Tools and Materials Metaphor. Essa linguagem foi desenvolvida para ajudar no aprendizado da metfora de ferramentas e materiais, segundo a qual o trabalho possui uma perspectiva especfica: as pessoas tem competncia e talento necessrio para seu trabalho; no h necessidade de definir um fluxo de trabalho fixo, porque as pessoas saber o que querem e podem arcar com mudanas na situao de forma adequada e as pessoas devem poder decidir sozinhas como organizar seu trabalho e seu ambiente (inclusive o software que utilizam), de acordo com suas tarefas. A idia principal dessa metfora que a maioria dos objetos de um domnio de aplicao devem pertencer ou a uma ferramenta ou a um material. Ferramentas so a forma de operar em materiais, onde materiais so resultado do trabalho em um domnio. Aarsten e outros [Aarsten 95] apresentam a G++, uma linguagem de padres para manufatura integrada ao computador. O problema abordado por essa linguagem o projeto de sistemas de informaes concorrentes e provavelmente distribudos, com aplicaes na manufatura integrada ao computador. O objetivo do trabalho aumentar o reuso de projeto orientado a objetos desde o nvel de componentes at o nvel arquitetural, oferecendo um modelo conceitual para arquiteturas concorrentes e distribudas. Cunningham [Cunningham 95] apresenta uma linguagem de padres chamada The CHECKS Pattern Language of Information Integrity, que diz como fazer checagem nas entradas de dados para separar dados invlidos dos vlidos e assegurar que o menor nmero possvel de dados invlidos seja registrado. O objetivo fazer essa checagem sem complicar os programas e comprometer a flexibilidade futura.. Em [Cunningham 96] ele apresenta a linguagem de padres chamada EPISODES: A Pattern Language of Competitive Development, que descreve uma forma de desenvolvimento de software apropriada para organizaes entreprenurial. Assume-se que os desenvolvedores dessa organizao trabalham em equipes pequenas de pessoas brilhantes e altamente motivadas e
23
que o tempo de mercado altamente valorizado pela organizao. Essa organizao tambm espera liberar outras verses em um tempo razovel, isto , ela espera ter sucesso e explorar esse sucesso pelo tempo que os clientes desejarem. Kerth [Kerth 95] apresenta uma linguagem de padres chamada Caterpillar's Fate: A Pattern Language for Transformation from Analysis to Design. Ela usada para apoiar a transformao dos documentos de anlise em um projeto inicial de software. O nome da linguagem (destino da lagarta) vem da analogia que feita entre a transio da anlise para o projeto com a lagarta que magicamente se transforma em uma borboleta. A linguagem tenta captar a sabedoria adquirida durante o desenvolvimento de solues de projeto a partir de modelos de anlise, documentando o que deve ser feito durante a transio. Braga e outros [Braga 99] apresentam uma linguagem de padres chamada A Pattern Language for Business Resource Management, que composta de padres para guiar o desenvolvimento de sistemas para gerenciamento de recursos de negcios tais como: produtos, carros, servios, etc. A linguagem composta de quinze padres
5.4 Exemplos
5.4.1 Colees de padres [Vlissides 96] uma coleo de padres, no caso dos padres apresentados no PLOP95. A Tabela 1 mostra alguns deles. Estudando esses padres de forma detalhada, observa-se que eles abrangem domnios e nveis de abstrao variados, e no possuem relacionamento explcito. So padres escritos por diversos autores diferentes e de maneira independente, isto , um autor no tinha conhecimento do que os demais autores estavam escrevendo. O editor do livro agrupou os padres que pertencem ao mesmo domnio ou fase do processo de desenvolvimento em captulos, mas isso no suficiente para que essa coleo de padres possa ser considerada um catlogo de padres.
Tabela 1 Coleo de Padres [Vlissides 96]
Captulo
Padro
Command Processor
Autor
Peter Sommerlad 24
Command Processor
Peter Sommerlad
A Structural Pattern for Designing Transparent Jim Doble e Roy Campbell Shopper Aamod Sane Layered Services Patterns for Processing Satellite Telemetry with Stephen Berczuk Distributed Teams A Pattern Language for Object-RDBMS Kyle Brown e Bruce Integration Transactions and Accounts Patterns for Classroom Education Software Demonstrations A Pattern Language for na Essay-Based Web Robert Orenstein Site Whitenack Ralph Johnson Dana Anthony
5.4.2 Catlogos de padres [Gamma 95] um catlogo de padres de projeto, pois possui mais estrutura e organizao, exibindo tambm relaes entre os padres. A Tabela 2 exibe os padres desse catlogo. Deve-se lembrar que os critrios para classificao dos padres so dois: escopo e propsito. No critrio escopo decide-se se o padro atua sobre uma classe ou sobre objetos da classe. Padres da classe lidam com os relacionamentos entre classes e suas subclasses, por meio do uso de herana, sendo portanto estabelecidos de forma esttica (em tempo de compilao). Padres do objeto lidam com relacionamentos entre objetos, que podem ser modificados durante a execuo e so mais dinmicos. A maioria dos padres utiliza herana de alguma forma. Portanto os nicos padres classificados na categoria classe so os que se concentram em relacionamentos de classes. No critrio propsito existem padres de criao, padres estruturais e padres comportamentais. Padres de criao concentram-se no processo de criao de objetos. Padres estruturais lidam com a composio de classes ou objetos. Padres comportamentais caracterizam as formas pelas quais classes ou objetos interagem e distribuem responsabilidades.
25
Propsito
De Criao Classe Factory Method Objeto Abstract Factory Builder Prototype Singleton Estrutural Adapter Adapter Bridge Composite Decorator Facade Flyweygth Proxy Comportamental Interpreter Template Method Chain of Responsability Command Iterator Mediator Memento Observer State Strategy Visitor
Escopo
Gamma e outros propem tambm uma outra forma de organizar seus padres de projeto, mostrada na Figura 7. Nessa figura os padres esto relacionados de acordo com a maneira com que cada um referencia os outros na seo Related Patterns.
26
5.4.3 Sistemas de padres [Buschmann 96] um exemplo de um sistema de padres, j que d maior destaque estrutura e interao entre os padres e os apresenta com maior uniformidade. A Tabela 3 mostra os padres desse sistema, no qual so usados dois critrios para classificao:
27
categorias de padres e categorias de problemas. As categorias de padres propostas por Buschmann e outros so:
padres arquiteturais, que podem ser usados no incio do projeto de alto nvel,
quando se faz a especificao da estrutura fundamental de uma aplicao;
Abstraindo os problemas especficos que ocorrem durante o desenvolvimento de um software podem ser definidas categorias de problemas, cada uma das quais envolvendo diversos problemas relacionados. Essas categorias de problemas correspondem diretamente a situaes concretas de projeto. As categorias de problemas propostas por Buschamnn e outros para agrupar os padres que fazem parte do seu sistema de padres so:
Da lama para a estrutura (em ingls, From Mud to Structure): padres que
apoiam a decomposio adequada de uma tarefa do sistema em sub-tarefas que cooperam entre si;
Padres arquiteturais Da lama para a estrutura Sistemas Distribudos Sistemas Interativos Sistemas adaptveis Decomposio da estrutura Organizao do trabalho Controle de Acesso Gerenciamento Comunicao Manuseio de Recursos Layers Pipes and Filters Blackboard Brokers Pipes and Filters Microkernel MVC PAC Microkernel Reflection
Padres de projeto
Idiomas
Whole-Part Master-Slave Proxy Command Processor View Handler Publisher-Subscriber Forwarder-Receiver Cliente-Dispatcher-Server Counted Pointer
5.4.4 Linguagem de padres [Meszaros 96] uma linguagem de padres para melhorar a capacidade e confiabilidade de sistemas reativos. Esses padres so geralmente encontrados em sistemas de telecomunicaes, embora possam tambm ser aplicados a quaisquer sistemas reativos com caractersticas de pico de capacidade. Por sistemas reativos entende-se aqueles sistemas cuja funo principal a de responder a requisies de usurios de fora do
29
sistema. Esses usurios podem ser pessoas ou mquinas. Exemplos de sistemas reativos so: sistemas computacionais de tempo compartilhado, centrais telefnicas de comutao, servidores, processamento de transaes on-line (como redes bancrias ATM, etc.). Todos esses sistemas precisam de alta capacidade a um custo razovel e alta confiabilidade quando frente de cargas extremas que podem levar sobrecarga do sistema. Essa linguagem de padres prope padres para lidar com a necessidade de sistemas de alta capacidade e sobrevivncia diante de condies de sobrecarga do sistema. A Figura 8 ilustra, de forma grfica, os padres que constituem a linguagem e seus relacionamentos, enquanto a Tabela 4 lista os padres e seus respectivos propsitos.
Capacity Bottleneck
Memory Capacity
Processing Capacity
Messaging Capacity
Faster Processor
Shed Load
Para ilustrar a similaridade de um padro de uma linguagem em relao a um padro convencional, como os vistos nos Captulos 4 a 10, descreve-se a seguir o padro Finish Work in Progress. Deve-se observar que, conforme foi dito na seo 13.2.4, como no existe um formato padro para escrever os padres de uma linguagem, os autores tm usado o formato que acreditam ser mais apropriado para documentar os padres que ele tem em mos. No caso desse exemplo, Meszaros utilizou o formato Nome/ Alias/ Problem/
30
que
referncias a outros padres da linguagem so colocadas em sublinhado. Isso garante que o usurio da linguagem fique consciente do inter-relacionamento entre seus diversos padres.
Padro
Capacity Bottleneck Memory Capacity Processing Capacity Messaging Capacity Faster Processor Optimize High-Runner Cases Shed Load Share the Load Finish Work in Progress Fresh Work before Stale Match Progress work with new Shed Work at Periphery Different Strokes for Different Folks Hash Access Port Leaky Bucket of Credits
Propsito
Quando h um gargalo na capacidade do sistema, como proceder. Quando a causa do gargalo na capacidade do sistema a capacidade de memria, como proceder. Quando a causa do gargalo na capacidade do sistema a capacidade de processamento, como proceder. Quando a causa do gargalo na capacidade do sistema a dificuldade de enviar mensagens entre processadores a tempo, como proceder. Quando um processador mais rpido necessrio para aumentar a capacidade de processamento do sistema, como proceder. Quando a otimizao dos casos de maior demanda necessria para aumentar a capacidade de processamento do sistema, como proceder. Quando o descarte de parte da demanda necessrio para evitar sobrecarga da capacidade de processamento do sistema, como proceder. Quando o atendimento da demanda deve ser compartilhado por mais de um processador para aumentar a capacidade de processamento do sistema, como proceder. Quando o trmino do atendimento de trabalho em curso necessrio para evitar sobrecarga da capacidade de processamento do sistema,, como proceder. Quando o atendimento prioritrio de certos clientes necessrio para evitar sobrecarga da capacidade de processamento do sistema, como proceder. Quando necessrio evitar o desperdcio dos recursos j empregados no atendimento de certos clientes, causado por sua desistncia de obter atendimento, como proceder. Quando necessrio o descarte da demanda que est alm da capacidade de processamento do sistema, como proceder para detectar o quanto antes o que dever ser descartado. Quando necessrio o estabelecimento de prioridades para o atendimento de certos clientes, como proceder para garantir que esse atendimento seja de boa qualidade. Quando o estabelecimento de funes Hash na porta de entrada de atendimento prioritrio necessrio para estabelecer as prioridades, como proceder. Quando reservatrios com vazamento so necessrios para armazenar os crditos enviados aos processadores perifricos por processadores sobrecarregados que todavia ainda possuem capacidade de processamento disponvel, como proceder
31
Padro 5 Finish Work in Progress (Termine o Trabalho em Andamento) Tambm conhecido como: Termine o que voc comeou Problema: Quais requisies devem ser aceitas e quais devem ser rejeitadas de
forma a melhorar o throughput do sistema?
32
33
implementao associados a esse padro. Se esses se referirem a outros padres, aplique-os recursivamente. 3. Se o sistema de padres no incluir um padro para seu problema de projeto, tente encontrar um padro em outras fontes conhecidas. 4. Se nenhum padro estiver disponvel, aplique as diretrizes de anlise e projeto do mtodo que voc est usando. Essas diretrizes fornecem pelo menos algum apoio til para resolver o problema de projeto em mos. Segundo Buschmann, essa abordagem simples evita que se criem outros mtodos de projeto. Ela combina a experincia de desenvolvimento de software captada pelos mtodos de anlise e projeto com as solues especficas para problemas de projeto descritas pelos padres. Os autores destas notas didticas discordam quanto a essa afirmao, por acharem que est claro que a abordagem proposta cria um novo mtodo de desenvolvimento de sistemas, diferente dos j existentes.
6.3 Exerccios
1) Discuta a evoluo de uma coleo de padres para se tornar um catlogo, um sistema e uma linguagem de padres. 2) Quais as dificuldades de recuperao de um padro nas diversas formas de agrupamento dos mesmos? 3) Apresente mais um critrio de classificao que poderia ser til na recuperao de padres. 4) Em que voc concorda/discorda em relao proposta para derivao de novos padres? Por que?
34
7 Concluses
Padres documentam uma parte repetida de um projeto orientado a objetos, permitindo seu entendimento e aplicao em um contexto particular. Eles fornecem ao projeto um vocabulrio comum aos desenvolvedores, facilitando a comunicao entre projetistas. Alm disso, eles constituem uma base de experincia para construo de software reutilizvel. Pode-se pensar em padres como blocos construtivos a partir dos quais projetos mais complexos podem ser construdos Padres expem conhecimento sobre a construo de software que foi ganho por especialistas em muitos anos. Portanto, todo trabalho sobre padres deveria esforar-se para colocar esse recurso precioso amplamente disponvel [Buschmann 96]: Todo desenvolvedor de software deveria ser capaz de usar padres de forma efetiva. Quando isso for conseguido, seremos capazes de comemorar a inteligncia humana que os padres refletem, tanto em cada padro individual quanto em todos os padres na sua plenitude. Tanto padres quanto frameworks so valiosos instrumentos de reuso. Alm disso, os padres so preciosos para a documentao dos frameworks.
Referncias:
[Alexander 77] [Alexander 79] [Appeton 97] [Beck 87] [Bosch 97] [Boyd 98] [Braga 98a] Christopher Alexander et. al., A Pattern Language, Oxford University Press, New York, 1977. Christopher Alexander, The Timeless Way of Building, Oxford University Press, New York, 1979. Appleton, Brad. Patterns and Software: Essential Concepts and Terminology, disponvel na WWW na URL: http://www.enteract.com/~bradappdocpatterns-intro.html. Beck, Kent; Cunningham, Ward. Using Pattern Languages for ObjectOriented Programs, Technical Report n CR-87-43, 1987, disponvel na WWW na URL: http://c2.com/doc/oopsla87.html Bosch, Jan. Design Patterns as Language Constructs, disponvel na WWW na URL: http://st-www.cs.uiuc.edu/users/patterns/papers, 1997. Boyd, L. Business Patterns of Association Objects. In: Martin, R.C.; Riehle, D.; Buschmann, F. Pattern Languages of Program Design 3. Reading, MA, Addison-Wesley, 1998, p. 395-408. Braga, Rosana T. V.; Germano, Ferno S.R.; Masiero, Paulo C. A Family of Patterns for Business Resource Management. In Proceedings of the 5th
35
Annual Conference on Pattern Languages of Programs (PLOP98), Monticello, Illinois, Technical Report #WUCS-98-25, Washington University in St. Louis, Missouri, EUA, agosto de 1998, disponvel na WWW na URL: http://jerry.cs.uiuc.edu/plop/plopd4-submissions/ plopd4-submissions.html. [Braga 98b] Braga, Rosana T.V.; Germano, Ferno S.R.; Masiero, Paulo C. Experimentos para implementao do padro Type-Object em linguagem Delphi. So Carlos, USP, 1998. (Documento de Trabalho, ICMSC-USP, So Carlos, SP) [Budinsky 96] Budinsky, F.J, et al. Automatic code generation from design patterns. IBM Systems Journal, V. 35, n 2, p. 151-171, 1996. [Buschmann 96] Buschmann, F. et at. A System of Patterns, Wiley, 1996. [Chikofsky 90] Chikofsky, E.J.; Cross, J.H. Reverse Engineering and Design Recovery: A Taxonomy. IEEE Trans. Software, pp. 13-17, Janeiro 1990. [CMG 98] Component Management Group (CMG). Anti-patterns, disponvel na WWW na URL: http://160.79.202.73/Resource/AntiPatterns/index.html. [Coad 91] Coad, Peter/ Yourdon, Edward. Object-Oriented Analysis, 2 edio, Yourdon Press, 1991. [Coad 92] Coad, Peter. Object-Oriented Patterns. Communications of the ACM, V. 35, n9, p. 152-159, setembro 1992. [Coad 95] Coad, P.; North, D.; Mayfield, M. Object Models: Strategies, Patterns and Applications, Yourdon Press, 1995. [Cook 94] Cook, Steve; Daniel, John. Designing Object Systems. Prentice Hall, 1994. [Coleman 94] Coleman, D. et al. Object Oriented Development - the Fusion Method. Prentice Hall, 1994. [CMG 98] Component Management Group (CMG). Anti-patterns, disponvel na WWW na URL: http://160.79.202.73/Resource/AntiPatterns/index.html. [Coplien 92] Coplien, J.O. Advanced C++ Programming Styles and Idioms. ReadingMA, Addison-Wesley, 1992. [Coplien 95] Coplien, J.; Schmidt, D. (eds.) Pattern Languages of Program Design, Reading-MA, Addison-Wesley, 1995. [Coplien 98] James O. Coplien. Software Design Patterns: Common Questions and Answers. In Linda Rising, editor, The Patterns Handbook: Techniques, Strategies, and Applications, p. 311-320. Cambridge University Press, New York, January 1998. [Cunningham 95] Cunningham,Ward. The CHECKS Pattern Language of Information Integrity. In Coplien, J.; Schmidt, D. (eds.) Pattern Languages of Program Design, Reading-MA, Addison-Wesley, 1995, p. 145-155. [Cunningham 96] Cunningham,Ward. EPISODES: A Pattern Language of Competitive Development. In: Vlissides, J.; Coplien, J.; Kerth, N (eds.). Pattern Languages of Program Design 2. Reading-MA; Addison-Wesley, 1996, p. 371-388. [Eriksson 98] Eriksson, H.; Penker, M. UML Toolkit. New York, Wiley Computer Publishing, 1998. [Fayad 97] Fayad, M.E.; Schmidt, D.C. (eds) Object-Oriented Application Frameworks. Communications of the ACM, V. 40, n 10, p. 32-38, 1997.
36
[Gamma 93] [Gamma 95] [Graham 94] [Johnson 88] [Johnson 91] [Johnson 97] [Johnson 97a] [Johnson 98] [Kerth 97] [Kramer 96]
Fowler, M. Analysis Patterns. Menlo-Park-CA, Addison-Wesley, 1997. Gall, Harald C., Klsh, Ren R.; Mittermeir, Roland T. Application Patterns in Re-Engineering: Identifying and Using Reusable Concepts. Proceedings of the 6th International Conference on Information Processing and Management of Uncertainty in Knowledge-Based Systems, Julho 1996, p. 1099-1106. Gamma, E.; Helm, R.; Johnson,R.; Vlissides, J. Design Patterns Abstraction and Reuse of Object-Oriented Design. LNCS, n 707, p. 406431, julho de 1993. Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J. Design Patterns Elements of Reusable Object-Oriented Software. Reading-MA, AddisonWesley, 1995. Graham, Ian. Object Oriented Methods, 2 edio, Addison-Wesley, 1994. Johnson, Ralph E.; Foote B. Designing Reusable Classes. Journal of Object Oriented Programming JOOP, 1(2):22-35, Junho/Julho 1988. Johnson, Ralph E.; Russo, Vincent. Reusing Object-Oriented Designs. Relatrio Tcnico da Universidade de Illinois, UIUCDCS 91-1696, 1991. Johnson, Ralph E. CS497 Lectures Lecture 12, 13, 14 e 17, disponvel na WWW na URL: http://st-www.cs.uiuc.edu/users/johnson/cs497 /notes98/online-course.html Johnson, Ralph. E. Frameworks = (Components + Patterns). Communications of the ACM, V. 40, n 10, p. 39-42, 1997. Johnson, Ralph E.; Woolf, B. Type Object. In: Martin, R.C.; Riehle, D.; Buschmann, F. Pattern Languages of Program Design 3. Reading-MA, Addison-Wesley, 1998, p. 47-65. Kerth, Norman L.; Cunningham, Ward. Using Patterns to Improve Our Architectural Vision, IEEE Software, pp. 53-59, janeiro, 1997. Krmer, Christian; Prechelt, Lutz. Design Recovery by Automated Search for Structural Design Patterns in Object-Oriented Software. Proceeding of the 3rd Working Conference on Reverse Engineering (WCRE), Monterey-CA, EUA, 1996, p. 208-215. Krasner, E. K.; Pope, S.T. A Cookbook for using the Model-ViewController User Interface Paradigm in Smalltalk-80. Journal of Object Oriented Programming, p. 26-49, Agosto-Setembro 1988. Martin, R.C.; Riehle, D.; Buschmann, F. (eds.) Pattern Languages of Program Design 3, Reading-MA, Addison-Wesley, 1998. Masiero, P.C.; Meira, C.A. A. Development and Instantiation of a Generic Application Generator. Journal of Systems and Software, Vol. 23, pp. 27-37, 1993. Masiero, P.C.; Germano, F.S; Maldonado, J.C. Object and System Life Cycles Revisited: Their Use in Object-Oriented Analysis and Design Methods. Proceedings of the 3rd CaiSE/IFIP8.1 (International Workshop on Evaluation of Modeling Methods in Systems Analysis and Design), Pisa, Italy, pp. O1-O12, Junho 1998.
37
[Meira 91] [Meszaros 95] [Pree 95] [Pressman 95] [Riehle 95]
[Roberts 98]
[Schmidt 96] [Schmid 97] [Taligent 93] [Taligent 94] [Turine 98]
[Vlissides 95]
MEIRA, C.A.A. Sobre Geradores de Aplicao, Dissertao de Mestrado apresentada ao Instituto de Cincias Matemticas de So Carlos, USP, setembro de 1991. Meszaros, Gerard. A Pattern Language for Improving the Capacity of Reactive Systems. In: Coplien, J.; Schmidt, D. (eds.) Pattern Languages of Program Design, Reading-MA, Addison-Wesley, 1995, p. 575-591. Pree, Wolfgang. Design Patterns for Object-Oriented Software Development. Reading-MA, Addison-Wesley, 1995. Pressman, Roger S. Engenharia de Software, Makron Books, 1995. Riehle, Dirk; Zllighoven, Heinz. A Pattern Language for Tool Construction and Integration Based on the Tools and Materials Metaphor. In: Coplien, J.; Schmidt, D. (eds.) Pattern Languages of Program Design, Reading-MA, Addison-Wesley, 1995, p. 9-42. Roberts, Don; Johnson, Ralph E. Evolving Frameworks: A Pattern Language for Developing Object-Oriented Frameworks, In Martin, R. C.; Riehle, D. and Buschmann, F. Pattern Languages of Program Design 3, Addison-Wesley, pp. 471-486, 1998, disponvel na WWW na URL: http://st-www.cs.uiuc.edu/users/droberts/evolve.html Schmidt, Douglas C.; Fayad, Mohamed; Johnson, Ralph E. (guest editors). Software Patterns. Communications of the ACM, V. 39, n10, pp. 36-39, outubro 1996. Schmid, H. A. Systematic Framework Design by generalization. Communications of the ACM, V. 40, n 10, p. 48-51, 1997. Taligent Inc. Leveraging Object-Oriented Frameworks. A Taligent White Paper, 1993, disponvel na WWW na URL: http://www.ibm.com/java/education/ooleveraging. Taligent Inc. Building Object-Oriented Frameworks. A Taligent White Paper, 1994, disponvel na WWW na URL: http://www.ibm.com/java/education/oobuilding/index.html. Turine, Marcelo A. S. Fundamentos, Conceitos e Aplicaes do Paradigma de Orientao a Objetos. Apresentao didtica, agosto de 1998, disponvel na WWW na URL: http://nt-labes.icmsc.sc.usp.br/cursos/sce220/02_98/aulas.html Vlissides, John. Reverse Architecture, Position Paper for Software Architectures Seminar, Schloss Daghstuhl, Germany, agosto 1995, disponvel na WWW na URL: http://st-www.cs.uiuc.edu/users/patterns/papers/,. Vlissides, J.; Coplien, J.; Kerth, N (eds.). Pattern Languages of Program Design 2. Reading-MA; Addison-Wesley, 1996. Yoder, J.W.; Johnson, R.E.; Wilson, Q.D. Connecting Business Objects to Relational Databases. Proceedings of the 5th Conference on the Pattern Languages of Programs, Monticello-IL, EUA, agosto de 1998. (Relatrio Tcnico n WUCS-98-25 da Universidade de Washington), disponvel na WWW na URL: http://jerry.cs.uiuc.edu/~plop/plop98/final_submissions/
38
http://www.omg.org. 39
janeiro de 1997 foi liberada a verso 1.0 da UML, tendo sido recomendada como padro pela OMG em final de 1997. Foi formado um consrcio para o desenvolvimento da UML. Este consrcio composto de diversas empresas, entre as quais a Digital Equipment Corporation, HP, Intellicorp, i-Logic, IBM, ICON Computing, MCI Systemhouse, Microsoft, Oracle Rational Software, TI e Unisys. J existem algumas ferramentas para auxiliar o projeto e a modelagem de sistemas, utilizando a UML. Por exemplo, a Rational Software Corporation e at mesmo a Microsoft j lanaram produtos para auxiliar a modelagem e projeto de sistemas, gerar cdigo a partir da modelagem e projeto e realizar engenharia reversa, ou seja, obter o modelo em UML a partir do cdigo. A Famlia Rational Rose98i Interprise a ferramenta mais completa e entre outras caractersticas, gera cdigo para SMALLTALK, PowerBuilder, C++, J++ e Visual Basic.
A2 Notao
A UML apenas uma linguagem de modelagem e no um mtodo, portanto fornece uma notao para modelagem e projeto orientado a objetos, sendo composta de 9 diagramas principais: Diagrama de casos de uso (em ingls, Use-Case Diagram), Diagrama de classe, Diagrama de objeto, Diagrama de estado, Diagrama de atividade, Diagrama de seqncia, Diagrama de colaborao, Diagrama de componente e Diagrama de disponibilidade. Os dois primeiros diagramas preocupam-se com a modelagem da parte esttica do sistema. Os diagramas de casos de uso so similares aos do mtodo OOSE. Os diagramas de classes so uma fuso dos diagramas de classe do OMT, Booch e da maioria dos mtodos OO, com alguns novos elementos de modelagem. Os diagramas de objetos so uma variao do diagrama de classes e utilizam uma notao praticamente igual. A diferena entre os dois que um diagrama de objetos mostra um certo nmero de objetos ou instncias das classes, ao invs das classes em si. Os diagramas de estado so uma simplificao dos statecharts, sendo utilizados para complementar a descrio de uma classe. Eles mostram todos os possveis estados que um objeto da classe pode ter e quais eventos causam mudanas de estado. Os diagramas de
40
41
Packages: agrupa elementos de modelagem; podendo conter classes, relacionamentos, classes abstratas, Packages, tipos, etc. A Figura 11 a seguir apresenta um exemplo de um diagrama de classes apenas com packages.
Esteretipo (Stereotype):
UML, que permite que o usurio estenda o meta-modelo para suprir necessidades no encontradas entre os meta-elementos disponveis, desde que a definio semntica da prpria linguagem no seja ferida. Um esteretipo pode ser aplicado a classes, relacionamentos de dependncia, atributos, operaes, etc. Exemplos de esteretipos: <<abstract>> e <<metclass>> O diagrama da Figura 9, apresenta exemplos de constrain. As classes so representadas pelos retngulos e as constraints esto entre {}. A Figura 10 apresenta um diagrama com a representao grfica de alguns dos elementos da UML.
membro de *
1 {subset } Chefe de
Pessoa
Comit
*
*
Pessoas
* +boss 0..1
+worker
+empregador Empresa
42
User Case
Package
Note
Acadmico
Um diagrama de caso de uso mostra o relacionamento entre os atores e os casos de uso dentro de um sistema. Um caso de uso uma descrio de uma funcionalidade (um uso especfico do sistema) oferecida pelo sistema. Um caso de uso representado por uma elipse contendo o nome do caso de uso. Um ator algum ou alguma coisa que interage com o sistema, podendo ser representado no diagrama como um retngulo de classe com o esteretipo "ator" ou pelo cone de um boneco. A Figura 12 mostra um diagrama de casos de uso para um sistema de biblioteca.
43
Sistema de Biblioteca
Leitor
Reservar Adiciona ttulo
Cancelar reserva
<<uses>>
<<uses>> <<uses>>
Manuteno
Bibliotecrio
Emprestar
Adiciona item
<<uses>> <<uses>>
Bibliotecrio
Devolver
Adiciona leitor
Um diagrama de classes uma coleo de elementos estticos do modelo, tais como: classes, tipos, e seus relacionamentos, conectados uns aos outros e aos seus contedos como um grafo. Alguns dos principais elementos de um diagrama de classes so:
operaes externas concretas, e nenhuma implementao das operaes. Um tipo estabelece uma especificao comportamental para classes. Uma classe que suporta as operaes definidas por um tipo dita "implementar" o tipo e pode ser representada como um smbolo de uma classe com o esteretipo << tipo >>. Alm disso, um tipo pode conter listas de atributos abstratos e de operaes.
44
Para diferenciar uma classe de uma instncia, o nome e o tipo aparecem sublinhados.
Utility: so esteretipos de classe, que servem para agregar atributos e/ou mtodos
genricos do sistema.
Templates: permitem a criao de famlia de classes Association Class: Designa uma associao que tem propriedades como uma classe, tais
como atributos, operaes e outras associaes. A UML fornece cinco tipos diferentes de relacionamento:
Associao: a forma de relacionamento mais genrica que pode haver entre duas classes Agregao: uma classe formada agregando-se outras classes Composio: uma classe formada compondo-se outras classes Generalizao: uma classe formada a partir da especializao de outra classe Dependncia: uma classe (dependente) depende de outra classe (independente). Uma
mudana na classe independente afeta a classe dependente. A UML permite tambm a representao de classificao dinmica e mltipla herana. A Figura 13 apresenta a notao para representao de uma classe.
Um atributo e um mtodo possuem trs tipos de visibilidade; pblica, privada e protegida. A seguir so apresentados exemplos de representao de alguns dos elementos de modelagem da UML que aparecem no diagrama de classes. A Figura 19 ilustra um relacionamento de dependncia. Neste caso uma alterao na classe Email dever implicar em uma alterao na classe DiscussionGroup.
45
Person
Owns Owned by
0..*
Car
Polygon
contains
3..*
Point
46
47