Padroes GoF

  • View
    1.164

  • Download
    0

Embed Size (px)

Transcript

Mdulo I Padres de Projeto GoFProfessores Ismael H F Santos ismael@tecgraf.puc-rio.br Eduardo Bezerra edubezerra@gmail.com

April 08

Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br

1

EmentaPadres de Projeto GoFIntroduo Singleton Iterator Factory Method Abstract Factory Command Template Method Adapter Composite Observer MVCAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 2

1

BibliografiaCraig Larman, Utilizando UML e Padres, Ed Bookman Eric Gamma, et ali, Padres de Projeto, Ed Bookman Martin Fowler, Analysis Patterns - Reusable Object Models, Addison-Wesley,1997 Martin Fowler, Refatorao - Aperfeioando o projeto de cdigo existente, Ed Bookman

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

3

LivrosCore Java 2, Cay S. Horstmann, Gary Cornell Volume 1 (Fundamentos) Volume 2 (Caractersticas Avanadas) Java: Como Programar, Deitel & Deitel Thinking in Patterns with JAVA, Bruce Eckel Gratuito. http://www.mindview.net/Books/TIJ/

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

4

2

POO-Java

Padres GoF Princpios

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

5

Padres GoFEm 1995, Erich Gamma, JohnVlissides, RalphJonhsone RichardHelm descreveram 23 padres que podem ser aplicados ao desenvolvimento de sistemas de software orientados a objetos.Gamma e seus colaboradores so conhecidos como a Gangue dos Quatro (Gand of Four, GoF).

No so invenes. So documentao de solues obtidas atravs da experincia. Foram coletados de experincias de sucesso na indstria de software, principalmente de projetos em C++ e SmallTalkAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 6

3

Categorias de padres GoFPadres de projeto esto relacionados a questes de comportamento de objetos, ciclo de vida de objetos, a interface dos objetos e a relacionamentos estruturais entre os objetos. Padres de Projeto permitem desenvolver software de melhor qualidade uma vez que utilizam eficientemente polimorfismo, herana, modularidade, composio, abstrao para construir cdigo reutilizvel, eficiente, de alta coeso e baixo acoplamento. Ajuda na documentao e na aprendizagem. O conhecimento dos padres de projeto torna mais fcil a compreenso de sistemas existentes.Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 7

Categorias de padres GoFOs padres catalogados pela equipe GoF possuem diversos nomes alternativos: Padres de projeto, Padres GoF ou Design patterns Em funo disso, os padres GoF foram divididos em trs categorias:Criacionais: tm a ver com inicializao e configurao de objetos. Estruturais: tm a ver com o desacoplamento entre a interface e a implementao de objetos. Comportamentais: tm a ver com interaes (colaboraes) entre sociedades de objetos.

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

8

4

Categorias de padres GoF

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

9

Categorias de padres GoF - MetskerUm padro "GoF" tambm classificado segundo o seu escopo; de classe ou de objeto. Nos padres com escopo de classe os relacionamentos que definem este padro so definidos atravs de herana e em tempo de compilao. Nos padres com escopo de objeto o padro encontrado no relacionamento entre os objetos definidos em tempo de execuo. Metsker classifica os pades GoF em 5 grupos, por inteno (problema a ser solucionado):(1) oferecer uma interface, (2) atribuir uma responsabilidade, (3) realizar a construode classes ou objetos (4) controlar formas de operao (5) implementar uma extensopara a aplicaoPadresAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 10

5

Categorias de padres GoF - Metsker

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

11

Relacionamento entre os Padres

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

12

6

Outros PadresH vrios catlogos de padres em softwareMuitos so especficos a uma determinada rea (padres J2EE, padres de implementao em Java, em C#, padres para concorrncia, sistemas distribudos, etc.) Os padres apresentados aqui so aplicveis em Java e outras linguagens

Dois outros padres so muito populares atualmenteDependency Injection: um caso particular de um dos padres GRASP (Indirection) bastante popular no momento (tambm conhecido como Inverso de Controle) Aspectos: uma extenso ao paradigma orientado a objetos que ajuda a lidar com limitaes dos sistemas OOAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 13

Mecanismos de heranaHerana estrita (extenso): subclasse estende a superclasse, acrescentando novos membros (atributos e/ou mtodos). A superclasse permanece inalterada. Herana de interface (especificao): a superclasse especifica o que uma subclasse deve oferecer, mas no implementa nenhuma funcionalidade. Apenas a interface da superclasse herdada pela subclasse. Herana polimrfica: a subclasse herda a interface e uma implementao de (pelo menos alguns) mtodos da superclasse. A subclasse pode ento redefinir mtodos para especializar o comportamento em relao ao que oferecido pela superclasse, ou ter que oferecer alguma implementao para mtodos que a superclasse tenha declarado mas no implementado.Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

14

7

Mecanismos de herana em JavaUma interface define assinaturas de mtodos e constantes.Uma interface pode estender (i.e., ou seja, herdar de) zero, uma, ou muitas interfaces. Uma interface no define quaisquer comportamento ou atributos.

Uma classe define atributos e mtodos.Uma classe pode estender (i.e., herdar comportamento e atributos de) zero ou mais classes. Uma classe pode implementar (i.e., estar de acordo com) zero ou mais interfaces, alm de poder estender sua super classe.Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 15

Mecanismos de herana em JavaExtenso simples palavra-chave extends; para herana estrita, marcar todos os mtodos da superclasse como final. Especificao uma especificao implementada como uma interface; subclasses da especificao usam a palavrachave implements para indicar este tipo de herana. separa interface e implementao implementaes podem ser transparentemente substitudas Diminui o acoplamentoAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 16

8

Mecanismos de herana em JavaHerana polimrfica como a extenso simples, usa a palavra-chave extends. Usando na superclasse as palavras-chave final e abstract, possvel indicar que partes da superclasse no podem ser modificadas ou devem ser modificadas.

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

17

Princpio de Substituio de LiskovLiskov Substitution Principle (LSP), por Barbara Liskov, em 1993. Princpio: Todas as classes derivadas de uma classe devem ser trocveis quando usadas como a classe base Exemplo:Seja A uma classe e B uma de suas subclasses. Seja ainda o mtodo m(A a) { } Se m se comporta corretamente quando o parmetro uma instncia de A, ele deve se comportar corretamente quando o parmetro uma instncia de B Isso sem que m precise saber que existe a classe BAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 18

9

LSP exemplo clssicoSeja a classe abaixo.class Rectangle { protected double h,w; protected Point top_left; public double setHeight (double x) { h=x; } public double setWidth (double x) { w=x; } public double getHeight () { return h; } public double getWidth () { return w; } public double area() { return h*w; } }

Suponha que tenhamos vrias aplicaes clientes da classe RectangleAbril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 19

LSP exemplo clssico (cont.)Adicionando um quadrado Um quadrado um tipo de retngulo, certo? Ento: class Square extends Rectangle { } A princpio, no precisamos modificar o cdigo cliente pr-existente.e.g., void m(Rectangle x) { } no precisa de modificaes quando da adio dessa nova classe Square.

Mas, h problemas

Abril 08

Prof(s). Ismael H. F. Santos & Eduardo Bezerra

20

10

LSP exemplo clssico (cont.)Problema: com a soluo anterior, podemos degenerar um quadrado!, ie, podemos criar quadrados com lados diferentes !?@ Uma segunda soluo: redefinir os mtodos setHeight e setWidth na classe Square:class Square extends Rectangle { public void setHeight(double x) { h=x; w=x; } public void setWidth(double x) { h=x; w=x; } }Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 21

LSP exemplo clssico (cont.)Considere agora o trecho de cdigo (cliente) a seguir:void m(Rectangle r) { r.setHeight(5); r.setWidth(4); assert (r.area() == 20); }

Quando temos apenas objetos retngulo, o cdigo acima vlido; no entanto, este cdigo no vlido quando, alm de retngulos, temos tambm quadrados. No h nada de errado com m O que est errado em Square?Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 22

11

O papel do LSPLSP um princpio bastante restritivo. Em geral, os desenvolvedores apiam LSP e o tm como uma meta. Deve ser usado como um sinalizador possvel e aceitvel que se viole esse princpio, mas a violao deve ser examinada cuidadosamente.

Depende do cliente da hierarquia de classesE.g., se temos um programa no qual altura e comprimento nunca so modificados, aceitvel ter um Square como uma subclasse de Rectangle.

Square subclass of Rectangle e Eclipse subclass of Circle tm sido fontes de guerras religiosas na comunidade OO por anos (vide http://ootips.org)Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 23

Acoplamentos concreto e abstratoUsualmente, um objeto A faz referncia a outro B atravs do conhecimento da cla