A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Comentado por Sérgio Crespo The GOF’s Pattern Catalog Design Patterns Elements of Reusable Object-Oriented Software Erich Gamma,

Apresentações semelhantes


Apresentação em tema: "Comentado por Sérgio Crespo The GOF’s Pattern Catalog Design Patterns Elements of Reusable Object-Oriented Software Erich Gamma,"— Transcrição da apresentação:

1 Comentado por Sérgio Crespo crespo@exatas.unisinos.br The GOF’s Pattern Catalog Design Patterns Elements of Reusable Object-Oriented Software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (The Gang of Four [GOF]) Addison-Wesley, MA, 1994 ISBN 0-201-63361-2

2 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Outras publicações sobre Design Patterns Design Patterns for Object-Oriented Software Development, W. Pree, Addison-Wesley, 1995 Pattern Languages of Program Design, Coplien & Schmidt, eds. Addison- Wesley, 1995 “Applying Design Patterns to PowerBuilder”, Neilson & Abdo, Dr. Dobbs Journal, June 1996 and many other books and articles! “Choosing the Right Association”, Windows Tech Journal, July 1996. “An Undo/Redo Stack Pattern for PowerBuilder”, Dr. Dobbs Journal, early 1997 “Distributing Shared Objects in PowerBuilder”, Dr. Dobbs Journal, early 1997 “Design Patterns for Distributed PowerBuilder”, Windows Tech Journal, late 1996 or early 1997 And, soon, a Book: Patterns of PowerBuilder Design, Publisher to be determined, early 1997.

3 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Patterns Web Sites R. Johnson’s Patterns Home Page: http://st-www.cs.uiuc.edu/users/patterns/patterns.html The primary source for online pattern information. The Portland Pattern Repository: http://c2.com/ppr/index.html Another really good source for patterns Objects International (P. Coad): http://www.oi.com/oi_home.html ‘Stratagies and Patterns Handbook‘ Windows Help file and other free stuff.

4 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Christopher Alexander say “Each pattern describes a problem wich occurs over and over again in our environment, and then describe the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice”[AIS+77, page x]

5 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Em outras palavras: um Design Patterns é: É uma solução genérica para uma classe de problemas. Seu uso deve contribuir para reutilização, flexibilização e modularização em processos de desenvolvimento de software OO. Possui descrição estruturada e catalogada, de maneira a oferecer clareza a seus usuários.

6 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns: Elementos Nome descreve o nome do design patterns Descrição do Problema Situa o desing pattern dentro de uma familia de problemas ao qual pode ser utilizado. Exemplo de solução fornece exemplos concretos da utilização do design patterns para a solução de um problema real. Conseqüências mostra os resultados da utilização do design patterns, informando sobre impactos causados em sistemas de software no momento de sua utilização.

7 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Descrevendo Design Patterns Nome Intenção Também conhecido como Motivação Aplicatibilidade Estrutura de design Participantes Colaborações Consequências Implementação Exemplo de código Usos conhecidos Patterns relacionados

8 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Divisão dos Design Patterns Criação Abstraem o processo de instanciação. Ajudam a tornar o sistema independente de como os objetos são criados, compostos e representados. Classes usam heranças para variações de instanciação, ao passo que aqui usa-se delegação, onde outro objeto é responsável por instanciar outros objetos. Estrutural Procuram descrever mecanismos para composição estrutural de objetos bem como oferecer novas funcionalidades e flexibilidade. Comportamental preocupa-se mais com algoritmos e distribuição de responsabilidades entre objetos e suas comunicações.

9 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Quais os principais desafios? Achar objetos que não vêm da análise. Determinar a granularidade dos objetos. Especificar Interfaces de objetos. Especificar Implementações. Usar mecanismos de reutilização. Criar Design flexível.

10 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Como escolher o Pattern certo??? Abordagens sugeridas: Saber quais os problemas de Design a serem enfrentados. Achar um Pattern cujo propósito se encaixe ao problema. Estudar Patterns similares. Comparar escolhas Examinar possíveis causas de Redesign. Considerar o que poderia variar no seu Design.

11 Design Patterns in Smalltalk Ralph Johnson, University of Illinois at Urbana-Champaign and Non-Software Examples of Software Design Patterns Meaningful examples of the patterns in the Design Patterns text in non-software domains Michael Duell in Object Magazine, Vol. 7, No. 5, July 1997, pp. 52-57 SENG 609.04 Design Patterns - Graduate Course in Software Engineering - Winter term, 1998 (second half) Mar 9 - Apr 13 1998 - University of Calgary – Canada Rob Kremer Design Patterns in Smalltalk – Ralph Johnson

12 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Strategy

13 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Strategy

14 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Strategy AbstractStrategy doIt ConcreteStrategy doItInContext Context doItInContext Define a family of algorithms, encapsulate each one, and make them interchangeable. Design Patterns in Smalltalk – Ralph Johnson

15 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br State

16 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br State request: StateN handle: Context handle: Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.. Current state State1 handle:... Design Patterns in Smalltalk – Ralph Johnson

17 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Facade

18 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Facade Provide a unified interface to a set of interfaces in a subsystem. Define a higher-level interface that makes the subsystem easier to use. Facade Design Patterns in Smalltalk – Ralph Johnson

19 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Composite

20 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Composite

21 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Composite (exemplo 1/2)

22 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Observer The Observer pattern defines an one-to-many dependency between a subject object and any number of observer objects so that when the subject object changes state, all its observer objects are notified and updated automatically. The Observer pattern is also known as Dependents and Publish-Subscribe.

23 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Exemplos State Gamma pag. 306 Context Request() State Handle() ConcreteStateA Handle() ConcreteStateB Handle() ConcreteStateC Handle() state->Handle() Abstract State Structure of State Pattern State: Deixa um objeto mudar seu comportamento quando seu estado interno muda, mudando, efetivamente, a classe do objeto. Design Patterns

24 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Exemplos State Gamma pag. 305 TCPConnection Open() Close() Acknowledge() TCPState Open() Close() Acknowledge() TCPEstablished Open() Close() Acknowledge() TCPListen Open() Close() Acknowledge() TCPClosed Open() Close() Acknowledge() TCPState->Open() Abstract Delega p/ TCPState Design Patterns

25 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns Problema: Definir um sistema onde se receba como entrada dois inteiros e se possa realizar um conjunto de operações matemáticas em tempo de execução. O algorítmo de operação do cálculo pode mudar e esta mudança não deveria exigir uma segunda recompilação do core sistema ou alteração do mesmo. Que tipo de Design Patterns utilizar, de forma que isso fique transparente para a aplicação cliente???

26 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Classes abstratas Design Patterns Strategy: Define uma família de algoritmos, encapsula cada um deles, e torna a escolha de qual usar flexível. O Strategy desacopla os algoritmos dos clientes que os usa.

27 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns //--------- Calculo.java------ -- - *** TEMPLATE *** public class Calculo implements Kernel { // Gerência de delegação. private static Kernel kernel; public Calculo(Kernel k) { kernel = k; } public void setKernel(Kernel k) { kernel = k; } // Interface no núcleo para quem delegamos. public int calcula(int i, int j) { return kernel.calcula(i,j); }

28 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns //--------Kernel.java------------------------- public interface Kernel { //<------ é a CLASSE HOOK Abstrata // Uma Interface é o equivalente a uma classe com todos os seus métodos // abstratos declarados assim como suas variáveis estáticas e finais. // Todo método deixado dentro da interface não tem implementaçãoe e toda // classe que implemente a interface é responsável pela codificação de // seus métodos. Uma interface é essencialmente, um modelo conceitual. public int calcula(int i, int j); //<------ é o MÉTODO HOOK // este método não sabe o que vai calcular! // NÃO tem Implementação alguma! }

29 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns //-------Soma.java------------------------ public class Soma implements Kernel { // Classe Concreta // implements implementa uma interface em nosso caso chamada Kernel. // Neste caso, aqui deve estar o código de implementação da interface. Em // nosso exemplo a implementação restringi-se ao retorno de uma valor // int igual a SOMA de dois valores recebidos como parametros i e j. public int calcula(int i, int j) { int soma=0; soma = i + j; return soma; }

30 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns //-------Produto.java--------------------- public class Produto implements Kernel { // Classe Concreta // implements implementa uma interface em nosso caso chamada Kernel. // Neste caso, aqui deve estar o código de implementação da interface. Em // nosso exemplo a implementação restringi-se ao retorno de uma valor // int igual ao PRODUTO de dois valores recebidos como parametros i e j. public int calcula(int i, int j) { int produto=0; produto= i * j; return produto; }

31 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Design Patterns //-------Aplicacao.java-------- -------- class Aplicacao { public static void main(String[] args) { Calculo obj = new Calculo(new Soma()); //-> O Fato de Aplicacao estar passando uma instância de Soma como um parâmetro para o Construtor de Calculo faz com que Soma.java seja compilado criando-se Soma.class. Ou seja, seu método abstrato é sobreposto pelo template Soma.class, desta forma a próxima linha que imprime o retorno da chamadado método calcula realiza a soma dos inteiros! System.out.println("Primeira implementacao(soma) para o metodo: calcula(9,3) = "+obj.calcula(9,3)); Class produto = null; try { produto = Class.forName("Produto"); // Neste caso, note-se que esta classe é referenciada como uma string Em tempo de compilação de // Produto.class, isto deve ser feito separadamente. } catch (ClassNotFoundException e1) { Calculo.java, não é gerada a classe System.out.println(e1); return; try { obj.setKernel((Kernel)produto.newInstance()); // Aqui, sobregrava-se o método calcula(em Kernel) com a implementação da classe Produto.class! } catch (IllegalAccessException e2) { System.out.println(e2); return; } catch (InstantiationException e3) { System.out.println(e3); return; } System.out.println("Segunda implementacao(produto) para o metodo: calcula(9,3) = "+obj.calcula(9,3)); }

32 Frameworks orientados a objetos Comentários Sérgio Crespo

33 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks O que é um Framework??? “Um framework é um conjunto de classes que constitui um design abstrato para soluções de uma família de problemas” - Johnson e Foote - 1988 “Um framework é um conjunto de objetos que colaboram com o objetivo de cumprir um conjunto de responsabilidades para uma aplicação ou um domínio de um subsistema.” - Johnson -1991 “Uma arquitetura desenvolvida com o objetivo de se obter a máxima reutilização, representada como um conjunto de classes abstratas e concretas, com grande potencial de especialização.” - Mattsson - 1996

34 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Particularização 1 Particularização 2 Particularização n... hot-spot Kernel Framework

35 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br hot-spot Framework

36 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Framework hot-spots

37 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Input_Data GetData(…) SetData(…) Sort_Data Sort_Proc(…) Show_Vect(…) Sort_Proc --Bolha --Quick-sort --etc... hot-spot

38 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Framework vs outras abordagens Design pattern orientado a objeto. Linguagem de pattern. Biblioteca de classes. Uma aplicação orientada a objetos.

39 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Design Pattern orientado a objeto Design patterns são mais abstratos do que um framework. Design patterns possuem uma arquitetura menor do que um framework. Um framework pode conter vários Patterns, no entanto o oposto não se aplica. Frameworks são mais especializados do que patterns. Frameworks estão sempre relacionados a um domíno de aplicação, enquanto patterns são mais genéricos e podem ser aplicados em vários domínios de aplicação. [Mattsson - 1996]

40 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Linguagem de pattern Descreve como fazer um design, enquanto um framework é o próprio design. Complementam frameworks desde que ensinem aos projetistas como utilizá-lo e a descrever porque ele foi projetado desta maneira. [Mattsson - 1996]

41 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Biblioteca de classes São um conjunto de classes relacionadas que tem funcionalidades de propósitos gerais Suas classes não são relacionadas a um domínio de aplicação específica, como no caso de classes de um framework. A diferença é o grau de reutilização e o seu impacto na arquitetura da aplicação. Uma classe da uma biblioteca é reutilizada sozinha, enquanto uma classe de um framework é reutilizada juntamente com as outras em uma instanciação. [Mattsson - 1996]

42 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Uma aplicação orientada a objeto Descreve a execução um programa que atende a todos os requisitos de uma especificação. Um framework captura as funcionalidades de diversas aplicações no domínio, mas não é executável, já que não cobre o comportamento de uma aplicação específica. [Mattsson - 1996]

43 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br O processo de desenvolvimento de um framework é mais difícil e trabalhoso, já que estuda-se agora soluções para um conjunto de problemas de um determinado domínio. Na análise do domínio, observa-se as caracteristicas comuns das diversas aplicações. Desenvolve-se o framework e as diversas aplicações serão feitas a partir da instanciação do framework. processo de desenvolvimento Frameworks

44 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Caracterização quanto ao Uso Um framework orientado a objetos pode ser usado de duas formas: Derivando se as classes do framework. ( architecture-driven ou inheritance-focused ou white box ) Combinado classes existentes. ( data-driven ou composition-focused ou black box ).

45 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Diretrizes de desenvolvimento Existe um pequeno número de diretrizes para o desenvolvimento de framework. Uma das mais importantes que se deve ter em mente quando se está desenvolvendo um framework é como criar a interação entre o framework e o seu usuário, de maneira que a sua instanciação seja feita sem muito esforço. O foco deverá estar em como o usuário interaje com o framework. Quando o usuário for desenvolver uma aplicação instanciando o framework, é necessário determinar quais os passos que serão realizados pelo framework e quais serão realizados pelo usuário.

46 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Diretrizes de desenvolvimento É importante identificar quais as classes e operações do framework que o usuário terá que utilizar. A quantidade de código escrita deverá ser reduzida a um mínimo, e isto é possível pelos seguintes motivos: Implementações concretas do framework que poderão ser utilizadas sem nenhuma modificação. O número de classes que devem ser derivadas devem ser reduzidas ao menor número possível.

47 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Como instanciar um framework Formas de se instanciar um framework. Conectando componentes já existentes reutiliza a interface do framework reutiliza regras para a conexão dos componentes Criando novas sub-classes concretas as sub-classes são bem acopladas a super-classe é necessário ter um maior conhecimento das classes abstratas

48 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks Público X Documentação Documentação de Frameworks

49 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Frameworks - exemplos ET++ UniDraw HotDraw

50 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br ET++ Framework ET++: A Portable Application Framework André Weinand Erich Gamma ET++ is a portable application framework, used to make platform-independent GUI-based application programs, at The University of Illinois at Urbana- Champaign.The University of Illinois at Urbana- Champaign

51 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br ET++ Framework - Arquitetura

52 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br ET++ Framework – exemplo1

53 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br ET++ Framework – exemplo2

54 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br ET++ Framework – exemplo3

55 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Unidraw Framework Unidraw: a framework for building domain-specific graphical editors John Vlissides / IBM Unidraw é um framework C++ para a criação de editores gráficos customizáveis que usa a bliblioteca IterViews. http://www.vectaport.com/pub/doc/unidraw.ps

56 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br O que é o Unidraw Unidraw é um framework para a criação de editores gráficos orientados a objetos para domínios como desenho técnico e artístico, composição de músicas e design de circuitos eletrônicos. A arquitetura Unidraw simplifica a construção desses editores provendo níveis de abstrações que são comuns aos vários domínios.

57 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Objetivos básicos do Unidraw O uso do framework Unidraw busca alcançar os três pontos básicos a seguir : Dá suporte a uma variedade de editores de objetos gráficos para vários domínios; Diminui significativamente o tempo para desenvolver um editor específico comparado com uma implementação especialista (voltada especificamente para um determinado domínio); Pode ser usado para criar editores stand-alone com performance e utilidade comparáveis àqueles desenvolvidos especificamente.

58 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Abstrações do Unidraw Unidraw define quatro abstrações básicas : - Componentes (components) : encapsulam a aparência e a semântica dos objetos de um domínio; - Ferramentas (tools) : provêm a manipulação direta dos componentes; - Comandos (commands) : definem as operações dos componentes e objetos; - Representação externa (external representation) : define como será o arquivo de saída gerado pelo editor.

59 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br UniDraw Framework

60 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Unidraw – exemplo 1

61 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Unidraw – exemplo 2

62 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br Unidraw – exemplo 3

63 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br HotDraw Framework

64 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br HotDraw Framework HotDraw is a two-dimensional graphics framework for structured drawing editors that is written in VisualWorks Smalltalk. It has been used to create many different editors from CASE tools to a HyperCard clone. You can easily create new figures and special manipulation tools for your drawings. Unlike many other drawing editors, HotDraw drawings can be animated. http://st-www.cs.uiuc.edu/users/brant/HotDraw/

65 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br HotDraw Framework

66 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br HotPaint - HotDraw The HotPaint program is a simple painting program. This program shows how to create new figures, as well as, how to create new tools.

67 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br DrawingInspector - Hotdraw The DrawingInspector program is a visual inspector for Smalltalk. Objects in Smalltalk are represented by figures, and references between objects are represented by directed lines.

68 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br MovingDrawing - HotDraw The MovingDrawing program is a simple animated program. You can draw rectangles. The rectangles move closer to each other until they come together in some central location. This program can be useful to learn how to animate drawings.

69 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br NetworkEditor - HotDraw The NetworkEditor program uses animation to solve the n-body problem. You specify the nodes and the weights between the nodes in the bottom part of the window, and the top part displays the nodes. The editor also allows you to move the nodes if they reach a stable but un-optimal positioning.

70 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br ObjectWorld - HotDraw The ObjectWorld program can be used for teaching some Smalltalk basics. You can draw figures in the bottom of the window, and animate them by entering Smalltalk commands in the top part of the window.

71 © 2003 Prof. D.Sc. Sérgio Crespo email:crespo@exatas.unisinos.br PERTChart - HotDraw The PERTChart program allows you to create and edit PERT charts. You can create new PERT figures and specify their name and start date. Their ending date will be automatically computed.


Carregar ppt "Comentado por Sérgio Crespo The GOF’s Pattern Catalog Design Patterns Elements of Reusable Object-Oriented Software Erich Gamma,"

Apresentações semelhantes


Anúncios Google