Mdulo I Padres de Projeto Go F Professores

  • Slides: 118
Download presentation
Módulo I Padrões de Projeto Go. F Professores Ismael H F Santos – ismael@tecgraf.

Módulo I Padrões de Projeto Go. F Professores 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

Ementa n Padrões de Projeto Go. F n Introdução n Singleton n Iterator n

Ementa n Padrões de Projeto Go. F n Introdução n Singleton n Iterator n Factory Method n Abstract Factory n Command n Template Method n Adapter n Composite n Observer n MVC Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 2

Bibliografia n n Craig Larman, Utilizando UML e Padrões, Ed Bookman Eric Gamma, et

Bibliografia n n Craig Larman, Utilizando UML e Padrões, Ed Bookman Eric Gamma, et ali, Padrões de Projeto, Ed Bookman Martin Fowler, Analysis Patterns - Reusable Object Models, Addison-Wesley, 1997 Martin Fowler, Refatoração - Aperfeiçoando o projeto de código existente, Ed Bookman Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 3

Livros n Core Java 2, Cay S. Horstmann, Gary Cornell Volume 1 (Fundamentos) n

Livros n Core Java 2, Cay S. Horstmann, Gary Cornell Volume 1 (Fundamentos) n Volume 2 (Características Avançadas) n Java: Como Programar, Deitel & Deitel n Thinking in Patterns with JAVA, Bruce Eckel n Gratuito. http: //www. mindview. net/Books/TIJ/ n Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 4

POO-Java Abril 08 Padrões Go. F Princípios Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Princípios Prof(s). Ismael H. F. Santos & Eduardo Bezerra 5

Padrões Go. F n Em 1995, Erich Gamma, John. Vlissides, Ralph. Jonhsone Richard. Helm

Padrões Go. F n Em 1995, Erich Gamma, John. Vlissides, Ralph. Jonhsone Richard. Helm descreveram 23 padrões que podem ser aplicados ao desenvolvimento de sistemas de software orientados a objetos. n Gamma e seus colaboradores são conhecidos como a Gangue dos Quatro (Gand of Four, Go. F). n Não são invenções. São documentação de soluções obtidas através da experiência. Foram coletados de experiências de sucesso na indústria de software, principalmente de projetos em C++ e Small. Talk Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 6

Categorias de padrões Go. F n Padrões de projeto estão relacionados a questões de

Categorias de padrões Go. F n Padrões de projeto estão relacionados a questões de comportamento de objetos, ciclo de vida de objetos, a interface dos objetos e a relacionamentos estruturais entre os objetos. n Padrões de Projeto permitem desenvolver software de melhor qualidade uma vez que utilizam eficientemente polimorfismo, herança, modularidade, composição, abstração para construir código reutilizável, eficiente, de alta coesão e baixo acoplamento. n Ajuda na documentação e na aprendizagem. O conhecimento dos padrões de projeto torna mais fácil a compreensão de sistemas existentes. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 7

Categorias de padrões Go. F n Os padrões catalogados pela equipe Go. F possuem

Categorias de padrões Go. F n Os padrões catalogados pela equipe Go. F possuem diversos nomes alternativos: Padrões de projeto, Padrões Go. F ou Design patterns n Em função disso, os padrões Go. F foram divididos em três categorias: n n n Criacionais: têm a ver com inicialização e configuração de objetos. Estruturais: têm a ver com o desacoplamento entre a interface e a implementação de objetos. Comportamentais: têm a ver com interações (colaborações) entre sociedades de objetos. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 8

Categorias de padrões Go. F Abril 08 Prof(s). Ismael H. F. Santos & Eduardo

Categorias de padrões Go. F Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 9

Categorias de padrões Go. F - Metsker n Um padrão "Go. F" também é

Categorias de padrões Go. F - Metsker n Um padrão "Go. F" também é classificado segundo o seu escopo; de classe ou de objeto. Nos padrões com escopo de classe os relacionamentos que definem este padrão são definidos através de herança e em tempo de compilação. Nos padrões com escopo de objeto o padrão é encontrado no relacionamento entre os objetos definidos em tempo de execução. n Metsker classifica os padões Go. F em 5 grupos, por intenção (problema a ser solucionado): n n n (1) oferecer uma interface, (2) atribuir uma responsabilidade, (3) realizar a construçãode classes ou objetos (4) controlar formas de operação (5) implementar uma extensãopara a aplicação. Padrões Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 10

Categorias de padrões Go. F - Metsker Abril 08 Prof(s). Ismael H. F. Santos

Categorias de padrões Go. F - Metsker Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 11

Relacionamento entre os Padrões Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra

Relacionamento entre os Padrões Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 12

Outros Padrões n Há vários catálogos de padrões em software n Muitos são específicos

Outros Padrões n Há vários catálogos de padrões em software n Muitos são específicos a uma determinada área (padrões J 2 EE, padrões de implementação em Java, em C#, padrões para concorrência, sistemas distribuídos, etc. ) n Os padrões apresentados aqui são aplicáveis em Java e outras linguagens n Dois outros padrões são muito populares atualmente n Dependency Injection: um caso particular de um dos padrões GRASP (Indirection) bastante popular no momento (também conhecido como Inversão de Controle) n Aspectos: uma extensão ao paradigma orientado a objetos que ajuda a lidar com limitações dos sistemas OO Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 13

Mecanismos de herança n Herança estrita (extensão): subclasse estende a superclasse, acrescentando novos membros

Mecanismos de herança n Herança estrita (extensão): subclasse estende a superclasse, acrescentando novos membros (atributos e/ou métodos). n A superclasse permanece inalterada. n Herança de interface (especificação): a superclasse especifica o que uma subclasse deve oferecer, mas não implementa nenhuma funcionalidade. Apenas a interface da superclasse é herdada pela subclasse. n Herança polimórfica: a subclasse herda a interface e uma implementação de (pelo menos alguns) métodos da superclasse. A subclasse pode então redefinir métodos para especializar o comportamento em relação ao que é oferecido pela superclasse, ou ter que oferecer alguma implementação para métodos que a superclasse tenha declarado mas não implementado. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 14

Mecanismos de herança em Java n Uma interface define assinaturas de métodos e constantes.

Mecanismos de herança em Java n Uma interface define assinaturas de métodos e constantes. n n Uma interface pode estender (i. e. , ou seja, herdar de) zero, uma, ou muitas interfaces. Uma interface não define quaisquer comportamento ou atributos. n Uma classe define atributos e métodos. n Uma classe pode estender (i. e. , herdar comportamento e atributos de) zero ou mais classes. n Uma classe pode implementar (i. e. , estar de acordo com) zero ou mais interfaces, além de poder estender sua super classe. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 15

Mecanismos de herança em Java n Extensão simples palavra-chave extends; para herança estrita, marcar

Mecanismos de herança em Java n Extensão simples palavra-chave extends; para herança estrita, marcar todos os métodos da superclasse como final. n Especificação n uma especificação é implementada como uma interface; subclasses da especificação usam a palavrachave implements para indicar este tipo de herança. n separa interface e implementação n implementações podem ser transparentemente substituídas n Diminui o acoplamento n Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 16

Mecanismos de herança em Java n Herança polimórfica n Abril 08 como a extensão

Mecanismos de herança em Java n Herança polimórfica n Abril 08 como a extensão simples, usa a palavra-chave extends. Usando na superclasse as palavras-chave final e abstract, é possível indicar que partes da superclasse não podem ser modificadas ou devem ser modificadas. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 17

Princípio de Substituição de Liskov n Liskov Substitution Principle (LSP), por Barbara Liskov, em

Princípio de Substituição de Liskov n Liskov Substitution Principle (LSP), por Barbara Liskov, em 1993. n Princípio: Todas as classes derivadas de uma classe devem ser trocáveis quando usadas como a classe base n Exemplo: n n n Seja A uma classe e B uma de suas subclasses. Seja ainda o método m(A a) { … } Se m se comporta corretamente quando o parâmetro é uma instância de A, ele deve se comportar corretamente quando o parâmetro é uma instância de B Isso sem que m precise saber que existe a classe B Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 18

LSP – exemplo clássico n Seja a classe abaixo. class Rectangle { protected double

LSP – exemplo clássico n Seja a classe abaixo. class Rectangle { protected double h, w; protected Point top_left; public double set. Height (double x) { h=x; } public double set. Width (double x) { w=x; } public double get. Height () { return h; } public double get. Width () { return w; } public double area() { return h*w; } … } n Suponha que tenhamos várias aplicações clientes da classe Rectangle… Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 19

LSP – exemplo clássico (cont. ) n Adicionando um quadrado… n Um quadrado é

LSP – exemplo clássico (cont. ) n Adicionando um quadrado… n Um quadrado é um tipo de retângulo, certo? n Então: class Square extends Rectangle { … } n A princípio, não precisamos modificar o código cliente pré-existente. n e. g. , void m(Rectangle x) { … } não precisa de modificações quando da adição dessa nova classe Square. n Mas, há problemas… Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 20

LSP – exemplo clássico (cont. ) n Problema: com a solução anterior, podemos “degenerar”

LSP – exemplo clássico (cont. ) n Problema: com a solução anterior, podemos “degenerar” um quadrado!, ie, podemos criar quadrados com lados diferentes !? @ n Uma segunda solução: redefinir os métodos set. Height e set. Width na classe Square: class Square extends Rectangle { public void set. Height(double x) { h=x; w=x; } public void set. Width(double x) { h=x; w=x; } } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 21

LSP – exemplo clássico (cont. ) n Considere agora o trecho de código (cliente)

LSP – exemplo clássico (cont. ) n Considere agora o trecho de código (cliente) a seguir: void m(Rectangle r) { r. set. Height(5); r. set. Width(4); assert (r. area() == 20); } n Quando temos apenas objetos retângulo, o código acima é válido; no entanto, este código não é válido quando, além de retângulos, temos também quadrados. n Não há nada de errado com m n O que está errado em Square? Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 22

O papel do LSP n LSP é um princípio bastante restritivo. Em geral, os

O papel do LSP n LSP é um princípio bastante restritivo. Em geral, os desenvolvedores apóiam LSP e o têm como uma meta. n Deve ser usado como um sinalizador n É possível e aceitável que se viole esse princípio, mas a violação deve ser examinada cuidadosamente. n Depende do cliente da hierarquia de classes n E. g. , se temos um programa no qual altura e comprimento nunca são modificados, é aceitável ter um Square como uma subclasse de Rectangle. n “Square subclass of Rectangle” e “Eclipse subclass of Circle” têm 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 abstrato n Usualmente, um objeto A faz referência a outro B

Acoplamentos concreto e abstrato n Usualmente, um objeto A faz referência a outro B através do conhecimento da classe de B. n Esse tipo de dependência corresponde ao que chamamos de acoplamento concreto. n Entretanto, há outra forma de dependência que permite que um objeto remetente envie uma mensagem para um receptor sem ter conhecimento da verdadeira classe desse último. n n Essa forma de dependência corresponde ao que chamamos de acoplamento abstrato. A acoplamento abstrato é preferível ao acoplamento concreto. n Classes abstratas e interface permitem implementar o acoplamento abstrato. Princípios de Análise e Projeto de Sistemas com UML - 2ª edição

Acoplamentos concreto e abstrato (cont) Princípios de Análise e Projeto de Sistemas com UML

Acoplamentos concreto e abstrato (cont) Princípios de Análise e Projeto de Sistemas com UML - 2ª edição

Reuso através de generalização n No reuso por generalização/especialização subclasses herdam comportamento da superclasse.

Reuso através de generalização n No reuso por generalização/especialização subclasses herdam comportamento da superclasse. n Exemplo: um objeto Conta. Corrente não tem como atender à mensagem para executar a operação debitar só com os recursos de sua classe. Ele, então, utiliza a operação herdada da superclasse. n Vantagem: n Fácil de implementar. n Desvantagem: n Exposição dos detalhes da superclasse às subclasses (Violação do princípio do encapsulamento). n Possível violação do Princípio de Liskov (regra da substituição). Princípios de Análise e Projeto de Sistemas com UML - 2ª edição

Reuso através de delegação n A delegação é outra forma de realizar o reuso.

Reuso através de delegação n A delegação é outra forma de realizar o reuso. n “Sempre que um objeto não pode realizar uma operação por si próprio, ele delega uma parte dela para outro(s) objeto(s)”. Ou seja, o objeto reusa as operações dos objetos para os quais ele delega responsabilidades. n A delegação implica na composição de objetos. n n A delegação é mais genérica que a generalização. n um objeto pode reutilizar o comportamento de outro sem que o primeiro precise ser uma subclasse do segundo. Princípios de Análise e Projeto de Sistemas com UML - 2ª edição

Reuso através de delegação n Uma outra vantagem da delegação sobre a herança de

Reuso através de delegação n Uma outra vantagem da delegação sobre a herança de classes é que o compartilhamento de comportamento e o reuso podem ser realizados em tempo de execução. n Na herança de classes, o reuso é especificado estaticamente e não pode ser modificado. n Desvantagens: n desempenho (implica em cruzar a fronteira de um objeto a outro para enviar uma mensagem). n não pode ser utilizada quando uma classe parcialmente abstrata está envolvida. Princípios de Análise e Projeto de Sistemas com UML - 2ª edição

Delegação x Herança de classes n Um exemplo… Que princípio está sendo violado aqui?

Delegação x Herança de classes n Um exemplo… Que princípio está sendo violado aqui? Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 29

Generalização versus delegação n Há vantagens e desvantagens tanto na generalização quanto na delegação.

Generalização versus delegação n Há vantagens e desvantagens tanto na generalização quanto na delegação. n De forma geral, não é recomendado utilizar generalização nas seguintes situações: Para representar papéis de uma superclasse. n Quando a subclasse herda propriedades que não se aplicam a ela. n Quando um objeto de uma subclasse pode se transformar em um objeto de outra subclasse. n n Por exemplo, um objeto Cliente se transforma em um objeto Funcionário. Princípios de Análise e Projeto de Sistemas com UML - 2ª edição

Padrões para Adaptação Interfaces n Padrões de design que concentram-se principalmente na adaptação de

Padrões para Adaptação Interfaces n Padrões de design que concentram-se principalmente na adaptação de interfaces são: n n Abril 08 Adapter: para adaptar a interface de uma classe para outra que o cliente espera Façade: oferecer uma interface simples para uma coleção de classes Composite: definir uma interface comum para objetos individuais e composições de objetos Bridge: desacoplar uma abstração de sua implementação para que ambos possam variar independentemente Prof(s). Ismael H. F. Santos & Eduardo Bezerra 31

POO-Java Abril 08 Padrões Go. F Singleton Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Singleton Prof(s). Ismael H. F. Santos & Eduardo Bezerra 32

Singleton n Motivação: algumas classes devem ser instanciadas uma única vez: n n n

Singleton n Motivação: algumas classes devem ser instanciadas uma única vez: n n n Um spooler de impressão Um sistema de arquivos Um Window manager Um objeto que contém a configuração do programa Um ponto de acesso ao banco de dados n Obstáculo: a definição de uma variável global deixa a instância (objeto) acessível mas não inibe a instanciação múltipla. n Como assegurar que somente uma instância de uma classe seja criada para toda a aplicação? Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 33

Singleton n Intenção: garantir que uma classe tem apenas uma instância, e prover um

Singleton n Intenção: garantir que uma classe tem apenas uma instância, e prover um ponto de acesso global a ela; n Solução: fazer com que a própria classe seja responsável pela manutenção da instância única, de tal forma que: n n n Abril 08 Quando a instância for requisitada pela primeira vez, essa instância deve ser criada; Em requisições subseqüentes, a instância criada na primeira vez é retornada. A classe Singleton deve: n armazenar a única instância existente; n garantir que apenas uma instância será criada; n prover acesso a tal instância. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 34

Singleton (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 35

Singleton (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 35

Singleton (implementação) public final class Singleton { private static Singleton instance = null; private

Singleton (implementação) public final class Singleton { private static Singleton instance = null; private Singleton () { . . . } public static Singleton get. Instance() { if (instance == null) { instance = new Singleton (); } return instance; } . . . } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 36

Singleton (uso) public class Uso. Do. Singleton { : Singleton obj; : obj =

Singleton (uso) public class Uso. Do. Singleton { : Singleton obj; : obj = Singleton. get. Instance(); : } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 37

POO-Java Abril 08 Padrões Go. F Iterator Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Iterator Prof(s). Ismael H. F. Santos & Eduardo Bezerra 38

Iterator n Toda coleção possui uma representação interna para o armazenamento e organização de

Iterator n Toda coleção possui uma representação interna para o armazenamento e organização de seus elementos. n Por outro lado, essa coleção deve permitir que seus elementos sejam acessados sem que sua estrutura interna seja exposta. n De uma maneira geral, pode-se desejar que estes elementos sejam percorridos de várias maneira, sem no entanto ter que modificar a interface da coleção em função do tipo de varredura desejado. n de frente para trás, vice-versa, ou mesmo em ordem aleatória. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 39

Iterator n O padrão Iterator permite descrever uma forma de percorrer os elementos de

Iterator n O padrão Iterator permite descrever uma forma de percorrer os elementos de uma coleção sem violar o encapsulamento dessa coleção. n Intenção: iterar sobre (percorrer seqüencialmente) uma coleção de objetos sem expor sua representação. n Obedecer o princípio do encapsulamento Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 40

Iterator n Solução: um objeto intermediário (iterator) é usado entre o cliente e a

Iterator n Solução: um objeto intermediário (iterator) é usado entre o cliente e a coleção de objetos. n n n Abril 08 Este objeto conhece a estrutura interna da coleção a ser percorrida, e apresenta uma interface para percorrer tal estrutura. Esta interface é independente dessa estrutura interna. Os clientes que desejam percorrer a coleção utilizam a interface do objeto intermediário, em vez de se comunicarem diretamente com a coleção de objetos. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 41

Iterator n Requisitos de um iterador n Um modo de localizar um elemento específico

Iterator n Requisitos de um iterador n Um modo de localizar um elemento específico da coleção, tal como o primeiro elemento. n Um modo de obter acesso ao elemento atual. n Um modo de obter o próximo elemento. n Um modo de indicar que não há mais elementos a percorrer. n Exemplo em Java n As classes List, Set e Sorted são subclasses de Collection, e herdam um método iterator() que retorna um objeto iterador. n O objeto Iterator possui métodos has. Next() e next(). Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 42

Iterator (exemplo) // ICollection. java // interface para obtenção de Iterator para coleções public

Iterator (exemplo) // ICollection. java // interface para obtenção de Iterator para coleções public interface ICollection { // obtenção de um Iterator public IIterator get. Iterator(); // determina existência de um elemento public boolean has(Object object); // adição de um elemento public boolean add(Object object); // remoção de um elemento public boolean remove(Object object); // remoção de todos os elementos public void remove. All(); } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 43

Iterator (exemplo) // IIterator. java public interface IIterator { // verifica a existência de

Iterator (exemplo) // IIterator. java public interface IIterator { // verifica a existência de um próximo elemento public boolean has. Next(); // retorna o próximo elemento public Object next(); } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 44

Iterator (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 45

Iterator (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 45

Iterator (participantes) n Iterator n Define um interface para o acesso e varredura; n

Iterator (participantes) n Iterator n Define um interface para o acesso e varredura; n Concrete. Iterator n Implementa a interface do Iterator; n Mantém referência (cursor) ao objeto que está sendo percorrido, podendo calcular qual o elemento seguinte. n Aggregate n Define um interface para a criação do objeto Iterator; n Concrete. Aggregate n Abril 08 Implementa o método da interface que retorna uma instância do Concrete. Iterator. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 46

Iterator (aplicabilidade) n O uso do padrão Iterator se aplica quando se quer: n

Iterator (aplicabilidade) n O uso do padrão Iterator se aplica quando se quer: n acessar o conteúdo de objeto agregados sem expor sua representação interna; n dar suporte a mais de uma maneira de percorrer a lista; n prover interface única para percorrer estruturas agregadas diferentes. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 47

Iterator (conseqüências) n Mantém separadas a representação interna e a responsabilidade de navegação pelas

Iterator (conseqüências) n Mantém separadas a representação interna e a responsabilidade de navegação pelas partes. n O iterador conhece a estrutura interna das partes, mas os clientes do iterador não conhecem. n Move da coleção de objetos para o objeto iterator a responsabilidade de acesso e varredura da coleção. n A coleção ainda é responsável por criar seus próprios iteradores e o faz através do padrão “Factory Method”. n Há a possibilidade de utilizar mais de um iterador simultaneamente. n Abril 08 Dá suporte a múltiplas maneiras de percorrer a coleção e, se necessário, essas varreduras podem ocorrer ao mesmo tempo. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 48

POO-Java Abril 08 Padrões Go. F Factory. Method Prof(s). Ismael H. F. Santos &

POO-Java Abril 08 Padrões Go. F Factory. Method Prof(s). Ismael H. F. Santos & Eduardo Bezerra 49

Factory Method n Intenção: definir uma interface para criação de um objeto, permitindo que

Factory Method n Intenção: definir uma interface para criação de um objeto, permitindo que as subclasses decidam qual classe instanciar. O Factory Method deixa a responsabilidade de instanciação para as subclasses. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 50

Factory Method (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 51

Factory Method (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 51

Factory Method (consequências) n Provê ganchos para subclasses; n Conecta hierarquia de classes paralelas

Factory Method (consequências) n Provê ganchos para subclasses; n Conecta hierarquia de classes paralelas quando há delegação. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 52

POO-Java Abril 08 Padrões Go. F Abstract Factory Prof(s). Ismael H. F. Santos &

POO-Java Abril 08 Padrões Go. F Abstract Factory Prof(s). Ismael H. F. Santos & Eduardo Bezerra 53

Abstract Factory n Intenção: fornecer uma interface comum para a criação de famílias de

Abstract Factory n Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. n Solução: crie uma interface para representar uma fábrica para cada família de objetos. As subclasses concretas instanciam cada família específica. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 54

Abstract Factory (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 55

Abstract Factory (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 55

Abstract Factory (participantes) n Fábrica Abstrata: declara uma interface para n n operações criam

Abstract Factory (participantes) n Fábrica Abstrata: declara uma interface para n n operações criam objetos-produto abstratos; Fábrica Concreta: implementa as operações para criar objetos-produto concretos; Produto Abstrato: declara uma interface para um tipo de objeto produto. Produto Concreto: implementa a interface abstrata de Produto Abstrato e define um objeto-produto a ser criado pela Fábrica Concreta correspondente. Cliente: utiliza apenas as interfaces declaradas por Fábrica Abstrata e Produto Abstrato. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 56

Abstract Factory (conseqüências) C Isola classes concretas: uma vez que uma fábrica encapsula a

Abstract Factory (conseqüências) C Isola classes concretas: uma vez que uma fábrica encapsula a responsabilidade e o processo de criação de objetos-produto, ela isola clientes das classes de implementação. C Fica mais fácil a troca de uma família de produtos, bastando trocar a fábrica concreta usada pela aplicação. C Promove consistência entre produtos. D O suporte a novos tipos de produtos é dificultado, já que a interface definida em Abstract. Factory fixa o conjunto de produtos que podem ser criados. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 57

Abstract Factory (aplicabilidade) n Quando o sistema deve ser independente de como seus produtos

Abstract Factory (aplicabilidade) n Quando o sistema deve ser independente de como seus produtos são criados, compostos e representados. n Quando o sistema deve ser configurado com uma dentre várias famílias de produtos. n É necessário fornecer uma biblioteca de classes, mas não é desejável revelar que produto particular está sendo usado. n Quando uma família de produtos relacionados foi projetada para ser usada em conjunto, e esta restrição tem de ser garantida. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 58

Abstract Factory (exemplo) n Exemplo: portabilidade entre bibliotecas GUI (Gnome, KDE) Abril 08 Prof(s).

Abstract Factory (exemplo) n Exemplo: portabilidade entre bibliotecas GUI (Gnome, KDE) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 59

POO-Java Abril 08 Padrões Go. F Command Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Command Prof(s). Ismael H. F. Santos & Eduardo Bezerra 60

Command n Intenção: associar uma ação a diferentes objetos através de uma interface conhecida.

Command n Intenção: associar uma ação a diferentes objetos através de uma interface conhecida. Permitir que objetos deste tipos tenham tais ações executadas sem que conheçamos o tipo de tais objetos ou a natureza das ações. n Solução: encapsular uma requisição como um objeto, permitindo a parametrização de clientes com diferentes requisições. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 61

Command (estrutura) Client * Invoker Command execute() Receiver action() Concrete. Command state execute() receiver.

Command (estrutura) Client * Invoker Command execute() Receiver action() Concrete. Command state execute() receiver. action() Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 62

Command (exemplo de interação) : Client : Invoker create() : Receiver : Concrete. Command

Command (exemplo de interação) : Client : Invoker create() : Receiver : Concrete. Command store( a. Command ) execute() action() Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 63

Command (conseqüências) n Isola requisitante do executor; n Permite registro (log) e/ou retrocesso (undo)

Command (conseqüências) n Isola requisitante do executor; n Permite registro (log) e/ou retrocesso (undo) de ações; n Permite execução em instante posterior à requisição n Abril 08 i. e. , permite enfileirar ações para processamento em outro momento. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 64

POO-Java Abril 08 Padrões Go. F Template Method Prof(s). Ismael H. F. Santos &

POO-Java Abril 08 Padrões Go. F Template Method Prof(s). Ismael H. F. Santos & Eduardo Bezerra 65

Template Method n Intenção: definir o esqueleto de um algoritmo em uma operação, postergando

Template Method n Intenção: definir o esqueleto de um algoritmo em uma operação, postergando (delegando) a definição de alguns passos desse algoritmo para subclasses. n Solução: n n n Em uma classe X, definir a parte invariável do algoritmo em uma operação. Essa operação é denominada método template (template method). Nesta mesma operação, fazer chamadas a operações que representam a parte variável do algoritmo. Essas operações são denominadas operações gancho (hook operations). Essas operações gancho devem então ser implementadas pelas subclasses de X. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 66

Template Method (estrutura) Abril 08 Prof(s). Ismael H. F. Santos Eduardo Bezerra primitive. Operation

Template Method (estrutura) Abril 08 Prof(s). Ismael H. F. Santos Eduardo Bezerra primitive. Operation 1 e primitive. Operation 2 são&“hook operations” 67

Template Method (aplicabilidade) n Quando queremos implementar partes invariáveis de um algoritmo e deixar

Template Method (aplicabilidade) n Quando queremos implementar partes invariáveis de um algoritmo e deixar que as subclasses implementem os comportamentos variáveis; n Quando comportamentos comuns entre subclasses devem ser fatorados e localizados em uma superclasse comum. n evitando assim duplicação de código; n Quando queremos controlar a extensão das subclasses. n Pode-se definir um template method que chama hook operations em pontos específicos, permitindo desse modo extensões apenas nesses pontos. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 68

Template Method (conseqüências) n Permite que as subclasses redefinam certos passos de um algoritmo

Template Method (conseqüências) n Permite que as subclasses redefinam certos passos de um algoritmo sem mudar a estrutura desse algoritmo. n i. e. , Template Method usa herança para variar partes de um algoritmo. n Um operação gancho não precisa necessariamente ser abstrata. n Padrão importante no desenvolvimento de frameworks, pois fornece uma maneira de separar o comportamento variável do comportamento invariável em uma aplicação. n n Abril 08 Permitem a implementação do Princípio de Hollywood (ou inversão de controle): “não nos ligue; nós ligaremos pra você”. Inversão: uma superclasse chama operações de sua subclasse. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 69

POO-Java Abril 08 Padrões Go. F Adapter Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Adapter Prof(s). Ismael H. F. Santos & Eduardo Bezerra 70

Adapter n Intenção: adaptar um objeto preexistente para uma interface específica com a qual

Adapter n Intenção: adaptar um objeto preexistente para uma interface específica com a qual um outro objeto espera se comunicar. n Solução: Definir uma classe que serve como um adaptador e que age como um intermediário entre o objeto e seus clientes (utilizar herança ou composição). O adaptador traduz comandos do cliente para o fornecedor e os resultados do fornecedor para o cliente. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 71

Adapter (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 72

Adapter (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 72

Adapter (exemplo) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 73

Adapter (exemplo) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 73

Adapter (exemplo) n Não posso usar XXCircle diretamente porque quero preservar o comportamento polimórfico

Adapter (exemplo) n Não posso usar XXCircle diretamente porque quero preservar o comportamento polimórfico em Shape. n n Diferentes nomes e listas de parâmetros XXCircle não deriva de Shape n Solução: definir uma classe Circle que sirva como um adaptador para XXCircle. n n n Circle deriva de Shape Circle contém XXCircle repassa mensagens enviadas para ele diretamente para XXCircle. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 74

Adapter (exemplo) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 75

Adapter (exemplo) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 75

Adapter (aplicabilidade) n Quando se quer usar uma classe já existente e sua interface

Adapter (aplicabilidade) n Quando se quer usar uma classe já existente e sua interface não combina com a esperada pelo cliente; n Quando se quer criar uma classe reutilizável que coopera com classes não relacionadas ou não previstas, isto é, classes que não necessariamente tenham interfaces compatíveis; n Quando se necessita usar várias classes existentes, mas é impraticável adaptar através da transformação de suas interfaces para transformá-las em subclasses de uma mesma classe. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 76

Adapter (conseqüências) n Adapta a classe Adaptee à Base. Classe pelo comprometimento com a

Adapter (conseqüências) n Adapta a classe Adaptee à Base. Classe pelo comprometimento com a classe concreta Adapter. n Como resultado, a classe Adapter não funcionará quando se quiser adaptar uma classe e todas as subclasses; n Um único objeto Adapter trabalha com várias classes Adaptee n Quer dizer, a própria classe Adaptee e todas as subclasses (se houver). n O objeto Adapter pode adicionar funcionalidades a todas as classes Adaptee de uma só vez. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 77

POO-Java Abril 08 Padrões Go. F Composite Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Composite Prof(s). Ismael H. F. Santos & Eduardo Bezerra 78

Composite n São comuns as situações onde temos que lidar com uma coleção de

Composite n São comuns as situações onde temos que lidar com uma coleção de elementos estruturada hierarquicamente (em vez coleções “lineares”). n Problema: como criar objetos utilizando partes de tal forma que tanto o objeto todo quanto os objetos parte forneçam a mesma interface para os seus clientes? n Composições podem cumprir com este requisito e ainda permitir: n n Abril 08 o tratamento da composição como um todo; ignorar as diferenças entre composições e elementos individuais; a adição transparente de novos tipos a hierarquia; a simplificação do cliente. Prof(s). Ismael H. F. Santos & Eduardo Bezerra 79

Composite (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 80

Composite (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 80

Composite (exemplo) n Expressões lógicas (booleanas) Abril 08 Prof(s). Ismael H. F. Santos &

Composite (exemplo) n Expressões lógicas (booleanas) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 81

Composite (conseqüências) n Objetos complexos podem ser compostos de objetos mais simples recursivamente. n

Composite (conseqüências) n Objetos complexos podem ser compostos de objetos mais simples recursivamente. n Permite forma assim uma hierarquia de objetos n O cliente pode tratar objetos “parte” e objetos “todo” da mesma forma. n n Isso resulta na simplificação deste cliente. Os clientes normalmente não sabem (e nem devem se preocupar) se eles estão tratando um componente individual ou composto. n Facilita a adição de novos componentes: o cliente não tem que mudar com a adição de novos objetos n Abril 08 Sejam eles simples ou compostos Prof(s). Ismael H. F. Santos & Eduardo Bezerra 82

Composite (conseqüências) n O projeto pode ficar geral demais, o que torna mais difícil

Composite (conseqüências) n O projeto pode ficar geral demais, o que torna mais difícil restringir os possíveis componentes de um objeto composto. n Abril 08 Por exemplo, em uma hierarquia que contenha documentos e suas partes (seções, parágrafos, etc. ), podemos compor seções com documentos, etc. o que não faz sentido Prof(s). Ismael H. F. Santos & Eduardo Bezerra 83

Composite (aplicabilidade) n Quando é necessário representar hierarquias do tipo todo-parte. n Quando é

Composite (aplicabilidade) n Quando é necessário representar hierarquias do tipo todo-parte. n Quando é necessário tratar todo e respectivas partes de forma indistinta. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 84

POO-Java Abril 08 Padrões Go. F Observer Prof(s). Ismael H. F. Santos & Eduardo

POO-Java Abril 08 Padrões Go. F Observer Prof(s). Ismael H. F. Santos & Eduardo Bezerra 85

Observer n Existem situações onde diversos objetos mudam seu estado de acordo com a

Observer n Existem situações onde diversos objetos mudam seu estado de acordo com a mudança de estado de outro objeto. n e. g. as views e o model no framework MVC n Define uma relação de dependência 1: N entre objetos, de tal forma que, quando um objeto (assunto) tem seu estado modificado, os seus objetos dependentes (observadores) são notificados. n n Abril 08 Assunto subject Observadores (objetos dependentes) observers Prof(s). Ismael H. F. Santos & Eduardo Bezerra 86

Observer (motivação) n Exemplo clássico Abril 08 Prof(s). Ismael H. F. Santos & Eduardo

Observer (motivação) n Exemplo clássico Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 87

Observer (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 88

Observer (estrutura) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 88

Observer (exemplo de interação) a. File an. Info. View Attach() a. List. View Attach()

Observer (exemplo de interação) a. File an. Info. View Attach() a. List. View Attach() set. State(“foo”) notify() update() get. State() “foo” Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 89

Observer em Java public class Observable extends Object { Collection<Observer> observers; public void add.

Observer em Java public class Observable extends Object { Collection<Observer> observers; public void add. Observer(Observer o); public void delete. Observer(Observer o); public boolean has. Changed(); public void notify. Observers(); public void notify. Observers(Object arg); … } public abstract interface Observer { public abstract void update(Observable o, Object arg); } public class Subject extends Observable{ public void set. State(String filename); public string get. State(); } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 90

Observer (aplicabilidade) n Quando uma abstração tem dois aspectos, um dependente do outro. Encapsulando-se

Observer (aplicabilidade) n Quando uma abstração tem dois aspectos, um dependente do outro. Encapsulando-se esses aspectos em objetos separados fará com que se possa variá-los e reusá-los independentemente; n Quando uma mudança em um objeto requer uma mudança em outros, e não se sabe como esses outros objetos efetivamente fazem suas mudanças; n Quando um objeto deve poder notificar outros objetos sem assumir nada sobre eles. Dessa forma evita-se que os objetos envolvidos fiquem fortemente acoplados. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 91

Observer (conseqüências) n Possibilita baixo acoplamento entre os objetos dependentes (os observadores) e o

Observer (conseqüências) n Possibilita baixo acoplamento entre os objetos dependentes (os observadores) e o assunto. n Acoplamento Abstrato n Suporte para broadcast n Dificuldade em saber o que foi mudado? Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 92

POO-Java Abril 08 Padrões Go. F Model View Controller Prof(s). Ismael H. F. Santos

POO-Java Abril 08 Padrões Go. F Model View Controller Prof(s). Ismael H. F. Santos & Eduardo Bezerra 93

POO-Java Abril 08 MVC em Swing Prof(s). Ismael H. F. Santos & Eduardo Bezerra

POO-Java Abril 08 MVC em Swing Prof(s). Ismael H. F. Santos & Eduardo Bezerra 94

Arquitetura MVC n O Swing adota uma arquitetura conhecida como Model-View-Controller (MVC) n Modelo

Arquitetura MVC n O Swing adota uma arquitetura conhecida como Model-View-Controller (MVC) n Modelo = dados / conteúdo n n Visão = aparência n n cor, tamanho Controle = comportamento n Abril 08 estado de um botão, texto reação a eventos Prof(s). Ismael H. F. Santos & Eduardo Bezerra 95

Interação entre os objetos MVC Model notifica Controller lê View Abril 08 atualiza Prof(s).

Interação entre os objetos MVC Model notifica Controller lê View Abril 08 atualiza Prof(s). Ismael H. F. Santos & Eduardo Bezerra 96

Arquitetura MVC no Swing Apresentação Controlador Visão Domínio Modelo Abril 08 Prof(s). Ismael H.

Arquitetura MVC no Swing Apresentação Controlador Visão Domínio Modelo Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 97

Modelo-Delegado Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 98

Modelo-Delegado Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 98

Documentos Swing Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 99

Documentos Swing Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 99

Explorando a Arquitetura MVC n Como os dados (o modelo) não fazem parte integrante

Explorando a Arquitetura MVC n Como os dados (o modelo) não fazem parte integrante do elemento de interface que os exibe, podemos gerenciá-los em separado n Por exemplo, é possível exibir um mesmo conjunto de dados em mais de um elemento de interface, simultaneamente n Também é possível fazer com que o elemento de interface use os dados originais, sem copiá-los Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 100

Exemplo de Uso n Suponha que você tem uma lista de nomes muito grande

Exemplo de Uso n Suponha que você tem uma lista de nomes muito grande e deseja exibí-la em uma JList n Usando a forma que vimos, esses nomes seriam copiados para dentro da lista n Para evitar essa replicação, podemos utilizar um modelo próprio, que permitirá à JList acessar diretamente a lista de nomes Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 101

Interface List. Model Define o modelo usado pela classe JList Abrange dois aspectos: n

Interface List. Model Define o modelo usado pela classe JList Abrange dois aspectos: n n 1. 2. o acesso aos dados o controle da modificação dos dados Métodos de List. Model n int get. Size() Object get. Element. At(int index) void add. List. Data. Listener(List. Data. Listener l) void remove. List. Data. Listener(List. Data. Listener l) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 102

De Volta ao Exemplo n Imagine que os nomes estão armazenados em um array

De Volta ao Exemplo n Imagine que os nomes estão armazenados em um array de String n Assumindo que a lista de nomes não é modificada, podemos ignorar o listener n Basta, então, definir uma classe que implemente List. Model e utilize o array como fonte dos dados Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 103

Criando um Modelo class Lista. De. Nomes implements List. Model { private String[] nomes;

Criando um Modelo class Lista. De. Nomes implements List. Model { private String[] nomes; Lista. De. Nomes(String[] nomes) { this. nomes = nomes; } public int get. Size() { return nomes. length; } public Object get. Element. At(int index) { return nomes[index]; } public void add. List. Data. Listener(List. Data. Listener l) {} public void remove. List. Data. Listener(List. Data. Listener l) {} } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 104

Usando o Modelo JFrame f = new JFrame("Teste"); f. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE);

Usando o Modelo JFrame f = new JFrame("Teste"); f. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); String[] nomes = {"a", "b", "c", "d", "e", "f"}; JList l = new JList(new Lista. De. Nomes(nomes)); Container cp = f. get. Content. Pane(); cp. add(new JScroll. Pane(l)); f. pack(); f. set. Visible(true); Exercícios – Questão 24 (again) - Exemplo com Default. List. Model ! Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 105

Classe JTree n Componente que exibe uma estrutura de dados hierárquica (árvore) n Segue

Classe JTree n Componente que exibe uma estrutura de dados hierárquica (árvore) n Segue o padrão MVC: os dados a serem exibidos são obtidos de um modelo (Tree. Model) n Abril 08 o modelo a ser utilizado é fornecido no construtor do objeto JTree Prof(s). Ismael H. F. Santos & Eduardo Bezerra 106

Terminologia n Uma árvore é composta de nós n um nó ou é uma

Terminologia n Uma árvore é composta de nós n um nó ou é uma folha ou possui nós filhos n todo nó, com exceção da raiz, tem exatamente um nó pai n toda árvore tem exatamente um nó raiz n Tipicamente, o usuário pode expandir ou colapsar nós, tornando seus filhos, respectivamente, visíveis ou invisíveis Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 107

Exemplos Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 108

Exemplos Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 108

Interface Tree. Model n Define um modelo de dados adequado para um JTree n

Interface Tree. Model n Define um modelo de dados adequado para um JTree n Pertence ao pacote javax. swing. tree n O Swing oferece uma implementação dessa interface: a classe Default. Tree. Model n Abril 08 modelo de árvore que utiliza Tree. Nodes Prof(s). Ismael H. F. Santos & Eduardo Bezerra 109

Métodos de Default. Tree. Model(Tree. Node root) Object get. Root() int get. Child. Count(Object

Métodos de Default. Tree. Model(Tree. Node root) Object get. Root() int get. Child. Count(Object parent) Object get. Child(Object parent, int index) void insert. Node. Into(Mutable. Tree. Node child, Mutable. Tree. Node parent, int index) void remove. Node. From. Parent(Mutable. Tree. Node node) void add. Tree. Model. Listener(Tree. Model. Listener l) Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 110

Interface Mutable. Tree. Node n É uma subinterface de Tree. Node n Modela um

Interface Mutable. Tree. Node n É uma subinterface de Tree. Node n Modela um nó que pode ser modificado n adição/remoção de filhos n modificação do conteúdo armazenado no nó (“user object”) n O Swing oferece uma implementação dessa interface: a classe Default. Mutable. Tree. Node Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 111

Métodos de Default. Mutable. Tree. Node(Object user. Object) Default. Mutable. Tree. Node(Object user. Object,

Métodos de Default. Mutable. Tree. Node(Object user. Object) Default. Mutable. Tree. Node(Object user. Object, boolean allows. Children) void add(Mutable. Tree. Node child) void remove(Mutable. Tree. Node child) Object get. User. Object() void set. User. Object(Object user. Object) String to. String() boolean is. Leaf() Enumeration children() Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 112

Criando um JTree Default. Mutable. Tree. Node mundo = new Default. Mutable. Tree. Node

Criando um JTree Default. Mutable. Tree. Node mundo = new Default. Mutable. Tree. Node (“Mundo”); Default. Mutable. Tree. Node europa = new Default. Mutable. Tree. Node (“Europa”); Default. Mutable. Tree. Node americas = new Default. Mutable. Tree. Node (“Américas”); mundo. add(europa); mundo. add(americas); … JTree arvore = new JTree(new Default. Tree. Model(mundo)); Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 113

Modos de Seleção n O modo de seleção de um JTree é configurado (e

Modos de Seleção n O modo de seleção de um JTree é configurado (e gerenciado) por um “modelo de seleção” (Tree. Selection. Model) n Modos disponíveis: n SINGLE_TREE_SELECTION n CONTIGUOS_TREE_SELECTION n DISCONTIGUOUS_TREE_SELECTION Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 114

Configurando o modo de seleção n Configurando modo de seleção JTree arvore = new

Configurando o modo de seleção n Configurando modo de seleção JTree arvore = new JTree(raiz); int modo = Tree. Selection. Model. SINGLE_TREE_SELECTION; Tree. Selection. Model tsm = arvore. get. Selection. Model(); tsm. set. Selection. Mode(modo); n Obtendo a seleção corrente Tree. Path path = get. Selection. Path() if (path != null) { Default. Mutable. Tree. Node sel. Node = (Default. Mutable. Tree. Node)path. get. Last. Path. Component(); String sel. Value = (String)sel. Node. get. User. Object(); … } Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 115

Eventos de Seleção n Eventos de seleção são gerados sempre que a seleção de

Eventos de Seleção n Eventos de seleção são gerados sempre que a seleção de uma árvore é alterada. n Esses eventos podem ser tratados através da adição de um Tree. Selection. Listener. n A interface Tree. Selection. Listener pertence ao pacote javax. swing. event e define apenas um método: value. Changed Exercícios – Questão 27 Exercícios – Questão 28 Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 116

Conclusões n Componentes essenciais de uma aplicação Swing: n Contêiners são janelas ou painéis

Conclusões n Componentes essenciais de uma aplicação Swing: n Contêiners são janelas ou painéis que contêm componentes. n Layouts especificam como arranjar componentes em um contêiner. n Componentes: são os controles da interface gráfica com o usuário. n Ouvintes (listeners) são conectados a componentes e contém o código que é executado quando o componente é usado. n É desse modo que uma ação do usuário sobre um componente é conectada a um método Java. Abril 08 Prof(s). Ismael H. F. Santos & Eduardo Bezerra 117

Conclusões n Alguns IDEs têm eles próprios facilidades de construção da interface gráfica (editores

Conclusões n Alguns IDEs têm eles próprios facilidades de construção da interface gráfica (editores de formulários) n e. g. Net. Beans - www. netbeans. org n Também há ferramentas específicas para a criação de GUIs em Java. Exemplos são: n n Abril 08 XUI - http: //xui. sourceforge. net/ UICompiler - http: //uic. sourceforge. net/ Prof(s). Ismael H. F. Santos & Eduardo Bezerra 118