Anda di halaman 1dari 218

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos

& Refactoring e Patterns

Java, OO
: Leila

Instrutora Perodo Disciplina Aula

Carvalho

: maro / 2008 : Java Bsico : 03


1

Leituras recomendadas:

Refactoring

www.mundojava.com.br www.javamagazine.com.br
Consulte as edies: Leia as edies:

??

Design Patterns.

35 36
44 46

Otimizao de cdigo. Qualidade aplicada (com Eclipse).


Refactoring no Eclipse. Refactoring: da teoria prtica
(com Eclipse)

Sites e livro: -wiki.java.net/bin/view/People/SmellsToRefactorings -www.refactoring.com/sources.html -www.martinfowler.com/ -KERIEVSKY, Joshua. Refactoring to Patterns. (.pdf) 2

Leituras recomendadas:

Refactoring

Leituras recomendadas:

Patterns

www.mundojava.com.br www.javamagazine.com.br
Consulte as edies: Leia as edies:

20 21 28 42 45

DAO, DTO, VO etc. Patterns aplicados. De volta aos patterns. Design patterns aplicados. 4 vdeo-aulas: patterns na prtica.

15 17 20 ??

Boas prticas e padres JEE Sistemas OO com padres de negcio. Camada de negcios: DAO genrico. Edies: 21, 22, 23...

Livros: - ALUR, Deepak et al. Core J2EE Patterns: Best Practices and Design Strategies - FREEMAN, Eric et al. Head First Design Patterns. (Use a cabea!) - FOWLER, Martin. Patterns of Enterprise Application Architecture. - GAMMA, E. et al. Padres de Projeto. Bookman, 2005. - BUSCHMANN, Frank et al. Patterns-Oriented Software Architecture (POSA), Volume 1: A System of Patterns. -EVANS, Eric. Domain-Driven Design: Tackling Complexity in the Heart of Software. -Dudney, Bill. J2EE Antipatterns.
4

Leituras recomendadas: Patterns

Referncias

Rumbaugh, James; Blaha, Michael; Premerlani, William; Eddy, Frederick; Lorensen William. Modelagem e Projetos Baseados em Objetos. Editora Campus, 1994 - ISBN 85-7001-841-X.
Larman, Craig. UTILIZANDO UML E PADRES - Uma introduo analise e ao projeto orientado a objetos. Editora Bookman, 2000 ISBN 85-7307-651-8. Gamma et al. Padres de Projeto - Solues Reutilizveis de Software Orientado a Objetos. Editora Bookman, 2000 - ISBN 85-7307-610-0.

Consideraes gerais
Conhecimentos prvios necessrios:
- Interfaces e classes abstratas. - Classes internas. - Princpios bsicos de OO: - Abstrao. - Encapsulamento x interface do objeto. - Herana. - Polimorfismo. *Quais relacionamentos definem (UML)? *Problema: so insuficientes para um bom programador!!

Tipos de programao a dominar:


- estruturada. - orientadas a objetos. - orientada a eventos. - declarativa (XML, properties...). - orientada a aspectos.

Cenrio atual: Refactoring, Processo gil e customizado, Modelagem gil com UML,

Dificuldades no mundo OO
No programamos e nem modelamos bem OO: vcios, desconhecimento,
desatualizao, dificuldade em acompanhar as mudanas. Programamos estruturado em Java: - no abstramos os objetos devidos. - no distribumos bem as responsabilidades entre os objetos. * o Diagrama de Seqncia pode mostrar isso. - no desacoplamos corretamente das tecnologias empregadas. - lidamos diretamente com as implementaes concretas dos objetos. - no trabalhamos orientados por componentes ou arquitetura. Modelamos estruturado com UML: - nossos UCs tratam de incluir, alterar, excluir e consultar . - no modelamos os processos: modelagem essencial ou de negcio. Produzimos documentao em excesso: - desconhecemos as boas prticas. - todo problema nos parece uma novidade!! - nenhum diagrama proibido.
8

Pattern MVC: detalhes


Tipo ? O nmero de camadas/responsabilidades pode ser insuficiente. Cada camada e componente podem ser sucessivamente divididos em H vrios outros modelos de camadas (PEAA, pg 103):
- por Martin Fowler: Apresentao, Lgica de Domnio e Fonte de dados. - por J2EE: Cliente, Apresentao, Negcio, Integrao e Recursos. - por Marinescu (EJB Desig patterns) : Apresentao, Aplicao, Servios, Domnio e Persistncia.

MVCs.

- por Brown (IBM Websphere) : Apresentao, Controle/Mediador, Domnio,


Mapeamento de dados e Fonte de dados. - por Kirtland (DNA Microsoft) : Apresentao, Negcio e Acesso a dados. - por Nilsson (VB, .NET) : Consumidor, Consumidor Helper, Aplicao, Domnio, Acesso

Persistncia, Stored procedures pblicas e Stored procedures privadas. -Eric Evans (Domain Driven Model):User interface, Application, Domain e Infrastructure.

....

OO: princpios avanados



Encapsular o que varia e mant-lo em separado. Prefira composio herana. Programe direcionado a interface (e no a implementao).
- ex: usar Collection em vez de ArrayList.

Diminua o acoplamento entre objetos que se interagem.


- ex: tratamento de eventos no Swing, DAO ...

Classes devem estar abertas para extenso (nunca para alterao).


- ex: Java I/O, Comparator, fbricas, Strategy ...

Dependa de abstraes e no de classes concretas (objetos de alto/baixo nvel).


- ex: as fbricas. (Princpio da Inverso de Dependncia)

Nunca fale com estranhos ou apenas fale com amigos.


*quebra de encapsulamento: tipos de variveis e de mtodos. - ex.: Facade (unificar/simplificar); Adapter (converter); Proxy (proteger).

No nos chame, ns chamamos voc. Ex: Template Method, Factory Method.

Cada classe deve ter uma nica razo para mudar (coeso).
- ex: CompositeView, Iterator... ou qualquer classe.
10

Sintomas de acoplamento indevido


1-Permitir que CAMADAS distantes possam acessar diretamente objetos/mtodos umas das outras. Ex: pginas JSP que acessam mtodos de negcio. 2-Fazer "import" de tecnologias ou de ferramentas da classe anterior. Ex: import de pacotes do Struts, do Hibernate, do Spring, da JPA etc. 3-Passar por parmetro (de mtodo) objetos que sejam de tecnologias ou de ferramentas da classe anterior.

Ex: propagar objetos HTTP pelas classes puro-Java (POJO).

Algo mais ???

11

Refactoring: Bad smells dentro das classes.

Bad smell (mau cheiro) ou anti-patterns: =cdigo complicado ou confuso devido a um design ruim, ou mesmo pela falta de design. =mau uso dos paradigmas de OO. -pode causar dificuldade de entendimento ou de manuteno.

12

Refactoring: Bad smells dentro das classes exemplo 01

13

Refactoring: Bad smells entre classes.

14

Refactoring: Bad smells entre classes - exemplo 02

15

Refactoring no Eclipse: Source

16

Refactoring no Eclipse: Refactor

17

Refactoring no Eclipse: Bad Smell - exemplo 01

public class BadSmell05 { /** Ha 2 bad smells nesta classe.*/ int testar(int valor) { return (maiorQueCinco(valor)) ? 2 : 1; } boolean maiorQueCinco(int valor) { return (valor > 5); } }

18

Refactoring no Eclipse: Bad Smell - exemplo 01 - refatorado

Refactoring com Eclipse.

19

Refactoring no Eclipse: Generate delegate methods

public class Aluno{ Integer String Endereco }

alunoID; nome; endereco;

class Endereco{ String cidade; String estado; public String getCidade() { return cidade; } public void setCidade(String cidade) { this.cidade = cidade; } }
Na classe Aluno, aplique Generate Delegate Methods para o objeto Endereo.

20

Refactoring no Eclipse: Bad Smell - exemplo 02

Replace conditional with Regular Expressions

(??)
21

Outro exemplo:

Template Method

abstract class ASuperClasse{ public ASuperClasse() { templateMethod();}


final void templateMethod() { for(int i = 0; i < 5; i++) { mostraMensagem1(); mostraMensagem2(); metodoHook(); } } abstract void mostraMensagem1(); abstract void mostraMensagem2(); public void metodoHook() { } } class MinhaSubclasse1 extends ASuperclasse { void mostraMensagem1() { System.out.print("Hello, "); } void mostraMensagem2() { System.out.println("World!"); } public void metodoHook(){...} } class MinhaSubclasse2 extends ASuperclasse { void mostraMensagem1() { System.out.print(Ola, "); } void mostraMensagem2() { System.out.println(Mundo!!"); } }

ASuperClasse

templateMethod( ) metodoHook( ) mostraMensagem1( ) mostraMensagem2( )

MinhaSubclasse1

MinhaSubclasse2

metodoHook( ) mostraMensagem1( ) mostraMensagem2( )

mostraMensagem1( ) mostraMensagem2( )

22

Refactoring no Eclipse: Bad Smell - exemplo 04

Replace Conditional with Polymorphism


23

O domnio: Sistema de Matrcula

Incluir aluno

Alterar aluno Aluno Solicitar Matrcula Secretaria

Incluir curso

Aluno: -estudante - candidato

Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa

Matrcula

Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )

Incluir ( ) Alterar( ) Cancelar()

24

O processo, o negcio: modelagem essencial

Matricular aluno Aluno Secretaria

Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito
Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa

Matrcula

Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )

Incluir ( ) Alterar( ) Cancelar()

25

FIM
26

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos

Java x UML
Instrutora : Leila Carvalho

Perodo
Disciplina Aula

: maro / 2008
: Java Bsico : 05
27

Java X UML

Exemplo de Abstrao

28

O domnio: Sistema de Matrcula


Incluir aluno

Alterar aluno Aluno Solicitar Matrcula Secretaria

Incluir curso

Aluno: -estudante - candidato

Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa

Matrcula

Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )

Incluir ( ) Alterar( ) Cancelar()

29

O processo, o negcio: modelagem essencial

Matricular aluno Aluno Secretaria

Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa

Matrcula

Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )

Incluir ( ) Alterar( ) Cancelar()

30

Exerccios

1- interpretar os diagramas. 2- implementar os relacionamentos UML usando Java.

3- distribuir as classes em pacotes para ampliar o


namespace. (package X import)

31

UML - tipos de relacionamento : teoria

Associao - especifica que objetos de um elemento (classe) esto conectados a objetos de outros elementos. Generalizao (herana) - relacionamento entre descries mais gerais e descries mais especficas, com mais detalhes sobre alguns dos elementos gerais. Agregao - relacionamento fraco do tipo parte de. um tipo especial de associao. Composio - relacionamento forte do tipo parte de. A composio entre um elemento (o todo) e outros elementos (as partes) indica que as partes s existem em funo do todo. Realizao - relacionamento entre uma interface e o elemento que a implementa. Dependncia - relacionamento de uso, no qual uma mudana na especificao de um elemento pode alterar a especificao do elemento dependente.
32

UML - tipos de relacionamento : simbologia

Associao

Sem/com navegao

Dependncia

Agregao Generalizao

Composio

Realizao

33

UML - multiplicidade : simbologia

Classe

exatamente 1

Classe

muitos (zero ou mais)

0..1

Classe

opcional (zero ou um)

m..n

Classe

seqncia especificada

34

UML - associao : exerccio 1


Companhia

* +empregador

1..* Empregado

+subordinado
0..*

1.1

+chefe

1.2

1.3
35

UML generalizao (classificao mltipla) : exerccio 2

Forma origem mover() exibir()

Retngulo ponto : Ponto

Crculo raio : float

Polgono pontos : ListaDePontos exibir()

Quadrado

2.1
36

2.2

UML generalizao : exerccio 3

37

UML - agregao : exerccio 4

Computador

4.1

Monitor

Teclado

Mouse

CaixaSistema

4.2

4.3

38

UML - composio : exerccio 5

5.1

5.2

5.3

39

UML - realizao : exerccio 6


<<interface>> Empregado Empregado_Impl

6.1

v erificarFicha() calcularSalrio()

6.2

6.3

40

UML - dependncia : exerccio 7

41

Sistema de Reserva de Veculos: exerccio 8

Locao de Veculos (JavaMagazine, ed 39, pg 28)


42

Sistema de Pedidos: exerccio 9


Cliente -nome: String -endereco: String -dataPrimeiraCompra: Date -dataUltimaCompra: Date -totalComprado: Currency #creditoPermitido: Currency #nivelCredibilidade()

Pedido

-codigo: Integer -dataRecebido -total: Currency


+confirmar() +cancelar() -calcularTotal():Currency gerarNovoCodigo: String

0..*

faz

itens
Item de Pedido -quantidade: Integer -preco: Currency -emEstoque: Boolean Cliente pessoa-jurdica nomeContato: String telefones[1..10]: String CGC: String FAX[1..3]: String Cliente pessoa-fsica nome: String CPF: String numCartaoCredito colocarListaNegra()

*
Produto

representante de vendas

Empregado

IPessoa

43

e-business: exerccio 10

44

Controle de Cursos: exerccio 11

45

Ambiente web + GenericDAO: exerccio 12

46

FIM
47

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos

Java x UML
Instrutora : Leila Carvalho

Perodo
Disciplina Aulas

: maro / 2008
: Java Bsico : 05 e 06
48

Java X UML

Exemplo de Abstrao

49

O domnio: Sistema de Matrcula


Incluir aluno

Alterar aluno Aluno Solicitar Matrcula Secretaria

Incluir curso

Aluno: -estudante - candidato

Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa

Matrcula

Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )

Incluir ( ) Alterar( ) Cancelar()

50

O processo, o negcio: modelagem essencial

Matricular aluno Aluno Secretaria

Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa

Matrcula

Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )

Incluir ( ) Alterar( ) Cancelar()

51

Instrues para resoluo dos exerccios:

1- interpretar os diagramas. 2- implementar os relacionamentos UML usando Java.

3- distribuir as classes em pacotes para ampliar o


namespace. (package X import)

52

UML - tipos de relacionamento : teoria

Associao - especifica que objetos de um elemento (classe) esto conectados a objetos de outros elementos. Generalizao (herana) - relacionamento entre descries mais gerais e descries mais especficas, com mais detalhes sobre alguns dos elementos gerais. Agregao - relacionamento fraco do tipo parte de. um tipo especial de associao. Composio - relacionamento forte do tipo parte de. A composio entre um elemento (o todo) e outros elementos (as partes) indica que as partes s existem em funo do todo. Realizao - relacionamento entre uma interface e o elemento que a implementa. Dependncia - relacionamento de uso, no qual uma mudana na especificao de um elemento pode alterar a especificao do elemento dependente.
53

UML - tipos de relacionamento : simbologia

Associao

Sem/com navegao

Dependncia

Agregao Generalizao

Composio

Realizao

54

UML - multiplicidade : simbologia

Classe

exatamente 1

Classe

muitos (zero ou mais)

0..1

Classe

opcional (zero ou um)

m..n

Classe

seqncia especificada

55

UML - associao : exerccio 1


Companhia

* +empregador

1..* Empregado

+subordinado
0..*

1.1

+chefe

1.2

1.3
56

UML generalizao (classificao mltipla) : exerccio 2

Forma origem mover() exibir()

Retngulo ponto : Ponto

Crculo raio : float

Polgono pontos : ListaDePontos exibir()

Quadrado

2.1
57

2.2

UML generalizao : exerccio 3

58

UML - agregao : exerccio 4

Computador

4.1

Monitor

Teclado

Mouse

CaixaSistema

4.2

4.3

59

UML - composio : exerccio 5

5.1

5.2

5.3

60

UML - realizao : exerccio 6


<<interface>> Empregado

6.1

Empregado_Impl v erificarFicha() calcularSalrio()

6.2

6.3

61

UML - dependncia : exerccio 7

62

Sistema de Reserva de Veculos: exerccio 8

Locao de Veculos (JavaMagazine, ed 39, pg 28)


63

Sistema de Pedidos: exerccio 9


Cliente -nome: String -endereco: String -dataPrimeiraCompra: Date -dataUltimaCompra: Date -totalComprado: Currency #creditoPermitido: Currency #nivelCredibilidade()

Pedido

-codigo: Integer -dataRecebido -total: Currency


+confirmar() +cancelar() -calcularTotal():Currency gerarNovoCodigo: String

0..*

faz

itens
Item de Pedido -quantidade: Integer -preco: Currency -emEstoque: Boolean Cliente pessoa-jurdica nomeContato: String telefones[1..10]: String CGC: String FAX[1..3]: String Cliente pessoa-fsica nome: String CPF: String numCartaoCredito colocarListaNegra()

*
Produto

representante de vendas

Empregado

IPessoa

64

e-business: exerccio 10

65

Controle de Cursos: exerccio 11

66

Ambiente web + GenericDAO: exerccio 12

67

FIM
68

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos

Vector, strings e expresses regulares


: Leila Carvalho

Instrutora

Perodo
Disciplina Aulas

: maro / 2008
: Java Bsico : 08 e 09
69

Agenda

1- array x Vector x Collection

2- Vector
3- Stringx StringBuilder x StringBuffer 4- split x StringTokenizer (em desuso) 5- Expresses regulares
70

Vector

71

a classe Vector

Array:

- Comprimento fixo.
- Elementos de um mesmo tipo. - Alterao cria novo objeto.

Vector: - Tamanho varivel.

- Elementos do tipo Object.


Alterao no mesmo objeto.
72

Collection : interfaces e implementaes

not-insertion-order

Insertionorder

Vector

73

Vector : exemplo 1
package javabasico;

import java.util.Vector;
public class TesteDeAula { public static void main(String args[]){

Vector v = new Vector();


v.add("vetor inicial"); String s = v.firstElement(); Vector v1 = new Vector(); v1.add("modo tradicional"); String s1 = (String) v1.firstElement();
//modo tradicional-> CASTING

//erro!!!

Vector<String> v2 = new Vector<String>(); v2.add("modo otimizado"); String s2 = v2.firstElement(); } }


74 //modo otimizado-> GENERICS

Vector : exemplo 2

75

Vector : EXERCCIOS *Resolva apenas um dos 2 exerccios a seguir:


1 - Implemente uma classe Java que acesse os servios de PilhaVector (slide anterior) e contenha o mtodo main. Quanto pilha (LIFO): a) alimente-a com objetos String. Ao final, mostre o tamanho do Vector.

b) desempilhe todos os elementos.


c) mostre o contedo e o tamanho de cada instncia desempilhada. 2 - Crie a classe FilaVector, a qual disponibilizar as funcionalidades de uma fila (FIFO). No mtodo main, execute as instrues: - alimente essa fila com objetos variados: String, Integer, Vector, Object etc. - recupere toda a fila com getFila( ).

- ao iterar pelo Vector recuperado:


- aplique for each ou Iterator. - mostre o nome da classe de cada elemento. Use getClass( ). - se a instncia for String, apresente a quantidade de caracteres. Use instanceof, cast e length( ).
76

tipos string

77

a classe String

- uma seqncia imutvel de caracteres. - Emprega os patterns Immutable e Flyweigth. String str = "abc"; //boxing

char data[] = {'a', 'b', 'c'};


String str = new String("abc"); String str1 = "Hello"; str1 = str1 + " World";
78

strings : outros tipos

79

strings : EXERCCIOS 1 e 2 *Resolva apenas dois dos 4 exerccios a seguir: 1 - Construa uma classe em Java (Inverso.java) que receba um parmetro StringBuffer e retorne um objeto desse mesmo tipo, com os valores de entrada na forma invertida. Use o mtodo split().
Exemplo: Java hoje aula dia --> dia aula hoje Java

2 - Crie a classe Utilitario.java, a qual deve atender aos requisitos:


conter um mtodo formato (ex.:Janeiro;Fevereiro;Maro;) - retornar um array de StringBuilder contendo os campos da string inicial. - use o mtodo split( ).
80

que

receba

uma

StringBuilder

no

campo1;campo2;

strings : EXERCCIOS 3 e 4

3 - Implemente um detector de seqncias palndromas. Use o mtodo reverse( ). Exemplo: ovo, radar, omo ... 4 - Crie a classe NomeABNT.java, a qual oferea os seguintes servios:

- receber um conjunto de nomes de autores no formato normal.


*Use janelas Swing.
Exemplo: William Gropp, Ewing Lusk, Nathan Doss e Anthony Skjellum.

- retornar a seqncia no formato ABNT: ltimo sobrenome em maisculo + , + demais partes do nome + ;.
Exemplo: GROPP, William; LUSK, Ewing; DOSS, Nathan; SKJELLUM, Anthony.

81

expresses regulares
(regex)

82

Expresso regular : definies


- um mtodo formal de se especificar um padro de texto. - uma composio de smbolos, caracteres com funes especiais, que, agrupados entre si e com caracteres literais, formam uma seqncia, uma expresso. - uma maneira de procurar um trecho em posies especficas como no comeo ou no fim de uma linha, ou palavra. - uma maneira de especificar padres complexos que podem ser procurados e casados em uma cadeia de caracteres.

* Nasceu em 1968 para uso no UNIX, editor ed. Depois veio o comando grep (global regular expression print).
* Denominaes possveis: expreg, regexp, regex e RE.

* Metacaracteres empregados: . ? * + ^ $ | [ ] { } ( ) \
-Se precisar usar esses caracteres em modo normal, coloque antes \\. - \\ evita conflitos de interpretao no Java. * Valida: data, horrio, nmero IP, telefone, CPF, carto de crdito etc.
83

Expresses regulares : exemplos

Expresses Regulares - Guia de Consulta Rpida: http://guia-er.sourceforge.net/index.html Sun Javadoc: http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Java Tutorials: http://java.sun.com/docs/books/tutorial/essential/regex/ 84

Expresses regulares com Java : exemplo 1


import java.util.regex.*; public class ExemploRegex1 { public static void main(String args[]){ String entrada = ".0.6.2."; String expressao = "(\\.[0-9]){3}"; Pattern pattern = Pattern.compile(expressao,Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(entrada); if(matcher.matches()) System.out.println("String 1 - padrao ok!!"); else System.out.println("String 1 - padrao incorreto!!"); //OU String entrada2 = "12:45"; if(entrada2.matches("12[:. ]45")) System.out.println("String 2 - padrao ok!!"); else System.out.println("String 2 - padrao incorreto!!");

} }
85

Expresses regulares com Java : exemplo 2


import import public public java.util.regex.*; javax.swing.JOptionPane; class ExemploRegex2{ static void main(String[] args){ while (true) { Pattern pattern = Pattern.compile("b[ip]+"); Matcher matcher = pattern.matcher(JOptionPane.showInputDialog( "Informe a string a ser validada:

", "34857bipip3245bi.347bip1212bipbip")); boolean found = false; while (matcher.find()) { String s = "Encontrei o texto " + matcher.group()+ " iniciando em " + matcher.start() + " e terminando em " + matcher.end(); JOptionPane.showMessageDialog(null,s); found = true; } if(!found){ System.out.printf("Padrao nao encontrado."); } } } } 86

Expresses regulares : EXERCCIOS 1 e 2 *Resolva apenas dois dos 4 exerccios a seguir:

1 O que este pattern valida: ^[-+]?[0-9]*\\.?[0-9]+$ ? Execute-o.

2 Este um pattern validador de sintaxe de emails:


^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$. Aceita endereos do tipo:

abc@xyz.net ; ab.c@tx.gov. Altere a regra desse padro para que


reconhea apenas emails com final [br | pt].

87

Expresses regulares : EXERCCIOS 3 e 4

3 O pattern ^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$ retorna verdadeiro ao criticar nmeros telefnicos no formato: (123)4567890, 123-456-7890, 1234567890, (123)-456-7890. Refatore a

notao apresentada, de modo que aceite apenas telefones de


Braslia: ddd 61; prefixo de 4 dgitos, iniciando com 3; e 4 dgitos

finais.
4 Implemente um validador de CPF, considerando que a string de entrada deve ser no formato nnn.nnn.nnn-nn: 3 grupos de dgitos

numricos, separados por ponto ; trao; 2 dgitos numricos.


88

Reviso para prova

89

Prova A1 - 02/04/2008 : itens importantes


1- Prova OBJETIVA: escolher 1 alternativa correta entre 5 opes. Notal total: 10,00. 2- Resoluo em modo INDIVIDUAL. 3- Cada prova representa 45% da avaliao do semestre (A1 e A2).Os outros 10% so freqncia e resoluo de exerccios em sala de aula. 4- Nota ser apresentada na aula seguinte: 07/04/2008. Nota mnima de aprovao: 7,00. 5- No ser permitido usar o computador : Java, Eclipse etc. 6- No ser permitida consulta ao material didtico. 7- No ser em modo eletrnico. Ou seja, prova impressa em papel A4. 8- 10 ou 15 questes abordando todo o assunto estudado at a aula de hoje, a saber: - Estrutura e elementos da linguagem Java: mtodos, atributos, comentrios, tipos primitivos, criaco de mtodo (static e no-static), troca de mensagem, modificadores de visibilidade. - Padro JavaBeans (getters / setters). - Princpios bsicos OO: abstrao, encapsulamento, polimorfismo e herana. - Classe, objeto, implementao de classe, instanciao de objeto, construtor default e especializado. - this, super, sobreposio e sobrecarga. - Diagramas UML x cdigo Java. - Integer, array, for each, boxing/unboxing de tipos wrappers. - Vector, String, StringBuilder/StringBuffer, split( ) x StringTokenizer. - Strings e Expresses regulares (apenas noes elementares!!). 9- Consulte: Java_OO.pdf, JavaBasico_Leila_(a3, a5e6, a8e9).ppt. 10- Site para download: www.arquivos.funiversa.org.br. 90

??????
91

FIM
92

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos

Classes abstratas e
Interfaces
Instrutora : Leila Carvalho

Perodo
Disciplina Aula

: abril / 2008
: Java Bsico : 12
93

Teoria geral

94

UML: diagramas

95

UML - tipos de relacionamento : simbologia

Associao

Sem/com navegao

Dependncia

Agregao Generalizao

Composio

Realizao

96

Classes abstratas

97

UML - generalizao : classes abstratas

98

UML - generalizao : classes abstratas

Exerccio rpido: construir o diagrama de classes do cdigo acima.


99

UML - generalizao : classes abstratas

http://simundi.blogspot.com/2008/02/design-pattern-template-method.html
100

exerccios

101

Classes abstratas : exerccio 1

1/3

http://www.javabeat.net/tips/design/2007/08/using-the-template-method-pattern/
102

Classes abstratas : exerccio 1

2/3

http://www.javabeat.net/tips/design/2007/08/using-the-template-method-pattern/
103

Classes abstratas : exerccio 1

3/3

104

Classes abstratas : exerccio 2

105

Classes abstratas : uso de Template Method

106

Interfaces

107

UML - realizao : interfaces

108

UML - realizao : interfaces


<<interface>> Empregado

Empregado_Impl v erificarFicha() calcularSalrio()

109

Interfaces :conceitos

Interface ...

a forma com que um objeto se apresenta para outros, no que diz respeito a seus atributos e mtodos. o conjunto de funcionalidades de uma classe.

a representao externa de um objeto.


coleo de operaes que especificam os

servios de uma classe.


o contrato que uma classe se prope a cumprir.
110

Interfaces : exemplo 6

Fernando Goulart e Elmo Raposo

111

Interfaces : exemplo 6

Fernando Goulart e Elmo Raposo

112

Interfaces : exemplo 6

Exerccio rpido: construir o diagrama de classes da interface AparelhoEletronico e implementaes.


Fernando Goulart e Elmo Raposo 113

Interfaces : exemplo 6

Fernando Goulart e Elmo Raposo

114

Interfaces : exemplo 7
interface TesteInterface{ public String s = "10"; public final String s2 = "10"; public static String s3 = "10"; public static final String s4 = "10"; }

interface TesteInterface2 { public String s = "100"; public final String s2 = "100"; public static final String s3 = "100"; }
interface TesteInterface3 { public String s = "1000"; public final String s2 = "1000"; public static final String s3 = "1000"; } interface TesteInterface4 extends TesteInterface, TesteInterface2, TesteInterface3 { public String s = "10000"; public final String s2 = "10000"; public static final String s3 = "10000"; //private void teste (); } public class TesteInterfaceClasseAbstrata implements TesteInterface4{ public static void main (String args[]){ System.out.println(s); }

115

Interfaces : ????

1 - Na documentao do Java, como se diferencia uma classe de uma interface?

116

Interfaces : ????

2 - Pode haver interface sem mtodo ou atributo?


Se existem: - Como so chamadas ? - Para que servem ? - Onde encontr-las ?

117

Marker interfaces : exemplos

Marker interfaces = tag interfaces = label interfaces.

Exemplos: -java.io.Serializable. -java.lang.Cloneable.

-java.util.RandomAccess.
-java.lang.reflect.Type (superinterface de alguns tipos em Java). -java.lang.Override (annotation) -java.lang.Deprecated (annotation) ..e vrias outras. -java.security.KeyStore.LoadStoreParameter

-java.security.KeyStore.Entry.
118

Interfaces X Classes abstratas : comparativo

119

exerccios

120

Calculando juros: ServicoUtil


public class ServicoUtil { public void calcularExibir(double montanteInicial, int periodoMeses, double jurosAoMes, String tipo) { double montanteComJuros = 0;

1/2

if (tipo.equalsIgnoreCase("calculadoraJurosSimples")){ double totalJuros = montanteInicial * periodoMeses * jurosAoMes; montanteComJuros = montanteInicial + totalJuros; }else if (tipo.equalsIgnoreCase("calculadoraJurosCompostos")){ // calcula 1+i jurosAoMes = jurosAoMes + 1; // calcula 1+i elevado a N double periodoCalculado = Math.pow(jurosAoMes, periodoMeses); montanteComJuros = montanteInicial * periodoCalculado; } //continua...
121

Calculando juros: ServicoUtil

2/2

System.out.println(" ************ Calculo de Juros ************"); System.out.println(" Montante Inicial....: " + montanteInicial); System.out.println(" Periodo em Meses....: " + periodoMeses); System.out.println(" Juros ao Mes........: " + jurosAoMes); System.out.println(" Objeto calculadora..: " + tipo); System.out.println(); System.out.println(" Total...............: " + montanteComJuros); System.out.println(" ******************************************"); } public static void main (String[] args) { ServicoUtil servico = new ServicoUtil( ); //parametros explicitos no codigo = "hard-coded" servico.calcularExibir(10000, 6, 0.03, "calculadoraJurosSimples");

}
} //fim.
122

Strategy: Calculadora
Servico

http://s2i.das.ufsc.br/tikiwiki/apresentacoes/padroes_de_projeto.pdf 123

Refactoring: Servico
public class Servico { private CalculadoraFinanceira calculadora; //a interface do Strategy.

public Servico (CalculadoraFinanceira calculadora) { this.calculadora = calculadora; } public void calcularExibir(double montanteInicial, int periodoMeses, double jurosAoMes) { double montanteComJuros = calculadora.calcularMontanteComJuros( montanteInicial, periodoMeses, jurosAoMes); System.out.println(" ************ Calculo de Juros ************"); System.out.println(" Montante Inicial....: " + montanteInicial); System.out.println(" Periodo em Meses....: " + periodoMeses); System.out.println(" Juros ao Mes........: " + jurosAoMes); System.out.println(" Objeto calculadora..: " + calculadora); System.out.println(); System.out.println(" Total...............: " + montanteComJuros); System.out.println(" ******************************************"); } public static void main(String[] args) { Servico servico = new Servio (new CalculadoraJurosSimples( )); servico.calcularExibir(10000, 6, 0.03); } }
124

FIM
125

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos

Classes Aninhadas ou Internas


Instrutora Perodo Disciplina Aula : Leila Carvalho : abril / 2008 : Java Bsico : 13
126

Contedo

N classes no mesmo arquivo

Classes aninhadas (nested classes):


Classe aninhada esttica

Classe interna (inner class)


Classe interna local Classe interna annima
127

Links interessantes

http://www.unix.org.ua/orelly/java-ent/jnut/ch03_13.htm

http://www.unix.org.ua/orelly/java-ent/jnut/ch03_12.htm#javanut3-ch-3-exanoncl http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

128

N classes no mesmo
arquivo

129

Vrias classes num mesmo arquivo : exemplo

public class ClassesNoMesmoArquivo { public static void main(String args[]){ HelloWorld helloWorld = new HelloWorld(); helloWorld.dizerAlgo(); } } class HelloWorld extends HelloWorldSuper{ public void dizerAlgo(){ System.out.println("Hello, world!!"); } } abstract class HelloWorldSuper implements HelloWorldInterface{ public abstract void dizerAlgo(); } interface HelloWorldInterface{ public void dizerAlgo(); }

130

Vrias classes num mesmo arquivo : por qu?

1.Melhorar a clareza do cdigo-fonte. 2.Facilitar a manuteno ou o refactoring da classe. 3.Reduzir os conflitos de nomes de classes. 4.Enfatizar o relacionamento entre as classes. 5.Agrupar logicamente classes relacionadas.
131

Classes aninhadas

132

Classe aninhada : teoria

Uma classe definida dentro do escopo de outra classe. Por qu? E mais: aumentar o encapsulamento: membros private.

classe aninhada classe interna

= denominao genrica. = denonimao especfica.

um membro da classe aninhadora (= mtodo).

http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

133

Classe aninhada : teoria

Pode ser esttica ou no esttica.


Pode ser: private, public, protected ou package private. (??) A classe interna tem acesso ilimitado aos membros da classe na qual foi definida, mesmo os do tipo private. Para evitar ambigidades, Java no permite que a classe aninhada tenha o mesmo nome da classe que a recebe.

Podem ocorrer sub-aninhamentos, ou seja, classe aninhada dentro de outra classe aninhada.
A classe aninhada recebe um nome conjunto: ClasseNoTopo$ClasseAninhada.class. Com isso, economizam-se nomes no pacote. O caminho de acesso classe aninhada deve ser do tipo: ClasseNoTopo.ClasseAninhada.
134

Classes aninhadas : tipos

135

Classes aninhadas : exemplo 1


public class ClassesAninhadas { //atributos e metodos da classe private int i = 5; static String s = "atributo da classe"; public static void main (String args[]){ System.out.println(s); System.out.println(ClasseEstatica.s); System.out.println(InterfaceAninhada.s); } //classe aninhada esttica static class ClasseEstatica{ public static String s = "classe estatica"; } //subclasse e superclasse internas private class SubClasse extends SuperClasse{ private class SubsubClasse{} } protected class SuperClasse implements InterfaceAninhada{} //interface interna private interface InterfaceAninhada{ String s = "interface aninhada"; } }
136

Classes aninhadas : exemplo 2 public class Externa { private String ve = "Varivel da classe externa"; class Interna { private String vi = "Varivel da classe interna";

public void metodoDaClasseInterna() {


System.out.println(ve); System.out.println(vi);

public static void main(String args[]) { Externa.Interna ci = new Externa().new Interna(); ci.metodoDaClasseInterna(); } }
137

Local inner class

138

Classe local : exemplo


interface Counter { int next(); }

public class LocalInnerClass { private int count = 0; Counter getCounter( final String name ) { //sem modificador de visibilidade !!! class LocalCounter implements Counter { public int next() { System.out.print( name ); return count++; } } return new LocalCounter(); ///////// } public static void main( String[] args ) { LocalInnerClass lic = new LocalInnerClass(); Counter c1 = lic.getCounter( "Local inner " ); for( int i = 0; i < 5; i++ ) { System.out.println( c1.next() ); } } }
139

Anonymous inner class

140

Classe annima : teoria


No aceita modificador de visibilidade. No possui construtor. Usar somente quando: a classe bem pequena. somente uma instncia necessria. a classe usada logo aps a definio. o nome da classe no interessa ao cdigo. Nomeao : ClasseNoTopo$n.class, sendo que n se inicia em 1 e vai sendo incrementado a cada nova ocorrncia de outra classe do mesmo tipo dentro da classe que as recebe. Cuidado: torna o cdigo difcil de ser lido !! Muito usada em tratamento de eventos: listener ou adapter. um atalho para implementar interface ou classe. O mtodo dessa classe pode receber parmetro? Testar!!
141

Classe annima : exemplo 1 public class AnonymousClassBasica { public static void main (String args[]){
//pode criar objeto, mas no h reuso da classe.

Teste t = new Teste(){ public void mostrar (){ System.out.println("classe anonima"); }

};
t.mostrar(); } } interface Teste{ public void mostrar(); }

142

Classe annima : exemplo 2


public class AnonymousClass { public static void main (String args[]){ //1a. Thread + classe anonima. new Thread( //construtor especializado new Runnable() { //interface Runnable-a classe anonima. public void run() { //metodo da interface try { while (true) { Thread.sleep(1000); System.out.print("."); } }catch(InterruptedException ex) {} } } ).start(); //2a. Thread + classe concreta MinhaThread. MinhaClasse minha = new MinhaClasse(); Thread t = new Thread(minha); t.start(); } } class MinhaClasse implements Runnable{ public void run() { //metodo da interface try { while (true) { Thread.sleep(1000); System.out.print("?"); } }catch(InterruptedException ex) {} } }
143

Exerccios

144

Classes aninhadas: exerccios 1 e 2


1 Execute os 3 exemplos de Classe Local e Classe Annima. Analise os resultados. 2 Dada a classe abstrata Bebida, execute o mtodo prepararBebida( ) para o objeto chocolateQuente, usando classe annima interna para implementar o mtodo abstrato addExtrato( ):
public abstract class Bebida { public final String preparBebida( ){ addAgua( ); addAcucar( ); addExtrato( ); misturar( ); return "Sua bebida est pronta!! \n".toUpperCase( ); }

Qual o nome dessa boa prtica empregada no mtodo prepararBebida?

private void addAgua( ){ System.out.println("Adicionando gua..."); } private void addAcucar( ) { System.out.println("Adicionando Acar..."); }

private void misturar( ){

System.out.println(Misturando os ingredientes ..."); }

protected abstract void addExtrato( ); } //Adicionando chocolate ...


145

Classes aninhadas: exerccios 3 e 4

3 O mtodo de uma classe annima pode receber parmetros? Tente uma refatorao do mtodo addExtrato( ), da classe Bebida: parametrize-o com a String extrato. 4 Refatore a AnonymousClassBasica: implemente a interface Teste e anule o uso de classe annima.

146

Classes aninhadas: exerccio AVANADO


Na classe CadastroEvento.java, implemente uma classe annima interna de WindowAdapter que permita: a) fechar a janela atual ( System.exit(0) ) e b) emitir um alerta de que a aplicao ser encerrada, chamando o mtodo showOptionDialog da classe JOptionPane com os seguintes parmetros: Frame-pai: o frame principal Mensagem: Deseja mesmo fechar a aplicao ?. Ttulo: Pergunta Tipo de opo: JOptionPane.YES_NO_OPTION. Tipo de mensagem: JOptionPane.QUESTION_MESSAGE.

cone: nulo.
Array de opes: array de Object com as opes Sim e No. Opo default: Sim (posio zero).

*Consulte o mtodo setDefaultCloseOperation(int i) de JFrame para saber como proceder se o usurio retroceder na sua deciso de fechar a janela da aplicao.

147

FIM
148

Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Ob etos

Interfaces grficas
(AWT e Swing)
Instrutora Perodo Disciplina Aulas :

Leila Carvalho

: abril / 2008 : Java Bsico : 15 e 16


1

Contedo
As interfaces grficas Os elementos grficos A hierarquia Icon JFrame Boas prticas CadastroEvento Eventos de janela JButton JComboBo !oo" And Feel #erenciadores de la$out
2

Links interessantes

http://java.sun.com/products/jfc/jws/SwingSet2.jnlp http://java.sun.com/docs/books/tutorial/uiswing/index.html http://java.sun.com/docs/books/tutorial/uiswing/components/applet.html

O %rojeto Eclipse&'()

'*ing+

veja, http://www.javamagazine.com.br/edicoes/jm23/index.jsp

As interfaces grficas

As interfaces grficas: AWT e Swing Java fornece um suporte muito interessante para construo de ap ica!es "rficas por meio de duas interfaces: AWT #$%stract &indo'in" (oo )it* + ,nicia mente o -nico tipo de ferramentas. at/ a verso 1+1+ (odas as c asses esto no pacote 0ava+a't+ 1 %astante incomp eta: fa tam (a% e. (a%%ed2ane. 3 ider etc+ 4ependente de p ataforma #peer-model* e comportamento 5etero"6neo+ 7 Swing ou JFC #Java 8oundation 9 ass* 7 sur"iu na verso J4:1+2+ 3u%stituiu $&(. mas ainda comparti 5am partes fundamentais #como eventos*+ $tua mente as c asses esto no pacote 0ava;+s'in"+ 3o <lightweight components=.
5

independentes de p ataforma+

Qual a relao entre AWT e Swing ?

? compati%i idade entre os componentes $&( e 3'in". para @ue no 5a0a conf ito de vers!es+ ? componentes 3'in" @ue 5erdam de componentes $&(+ A;emp o: o componente J8rame. @ue fornece a 0ane a principa da ap icao. / derivado da c asse 8rame+ Bs nomes dos componentes J89 sempre comeam com <J=+ Co mais uti iDar os componentes $&(: usar os componentes correspondentes criados no 3'in"+ 3o dois "randes e;emp os de reuso: no / necessrio reescrever cEdi"o. mas apenas uti iDar as funciona idades imp ementadas nesses pacotes+
>

Os ele entos grficos

Os

ele!entos de AWT e Swing

1 - Componentes grficos: so e ementos @ue o


usurio manipu a com o mouse ou com o tec ado+

2 - Eventos: assina am a!es do usurio consideradas


importantes. como o c ic) do mouse em um %oto+ Java adota o tipo de pro"ramao diri"ida por eventos: um evento ocorrido / tratado por event listener. uma cate"oria especia de c asses+

3 - Gerenciadores de layout: "overnam a maneira


pe a @ua os componentes aparecem na te a+
8

"es#endando os ele!entos grficos$$$

5ttp://0ava+sun+com/products/0fc/0's/3'in"3et2+0n p

Co!%onentes grficos: e&e!%los

1/3

10

Co!%onentes grficos: e&e!%los

2/3

11

Co!%onentes grficos: e&e!%los

3/3

12

A hierar!uia

13

JWindow

Window

Dialog

JDialog

Frame Co!%onent Container J abel

JFra

Abstract!utton

J!utton

'Co!%onent JPanel

J"ootPane
14

Co!%onent
$ c asse 9omponent define um o%0eto @ue ten5a representao "rfica. como %ot!es. campos de te;tos. c5oices etc+ (odos os m/todos definidos nesta c asse estaro disponHveis para todos os componentes visuais das su%c asses+ ,niciou a id/ia de componentiDao: arrastar e ementos "rficos e criar ap ica!es visuais+ $s ferramentas I$4 #Iapid $pp ication 4eve opment* uti iDam esse princHpio+
15

#omponent $ !(todos !ais usados


setName#3trin" n* set isi!le#%oo ean %* setEna!led#%oo ean %* set"ocation#int ;. int K* set#i$e#int ar"ura. int a tura*
J Atribui um nome ao componente
- orna o componente vis!vel ou n"o. - #abilita ou desabilita o componente. - $etermina a posi%"o do componente na tela. - $etermina tamanho do componente& em pixels.

set%ounds#int ;. int K. int ar". int a t* - $etermina a posi%"o e o tamanho. set&oreground#9o or c* set%ac'ground#9o or c* set&ont#8ont f*
- Altera a cor de frente. - Altera a cor de fundo. - Altera a fonte. Veja prximo slide.
1>

Color e )ont
Color: atri%ui cor #frente ou fundo* ao componente.
atrav/s da composio primria de verme 5o. verde e aDu #padro ILB*+ Mse: 1 J o construtor Color!int red" int #reen" int blue$% 2 J ou as Constantes #tambm em minsculas*: ! A#% ! &' #(A) DA"%*+"A( +"A( +"'') I+,-*+"A( .A+')-A /"A)+' PI)% "'D W,I-' A;emp o: Color c & ne' Color !())" )*" +$% //red

('

/W

)ont: determina a fonte # etra* em @ue os rEtu os sero escritos+ Mse o construtor
&ont#Strin# nome" int,estilo" int,taman-o*+ Estilo: PL./0" BOL1" /2.L/C
(use o " para juntar estilos)

E(emplo: 3ont 4 & ne' 3ont!5arial6" 3ont7PL./0" *8$%


1F

Container
1 uma cate"oria especia de componente "rfico @ue pode conter outros componentes ou mesmo outros containers+ a mesma noo do mundo real. Mti iDa uma ista encadeada para referenciar os seus e ementos inte"rantes+ Mm app et. uma 0ane a e um paine so e;emp os de container+ 9ada container possui associado um "erenciador de aKout para contro ar a maneira pe a @ua seus componentes sero mostrados #taman5o e posio*+
18

#ontainer
add#9omponent c* add#9omponent c. int i* set"ayout#NaKoutOana"er *

$ !(todos !ais usados

J Adiciona um componente ao container. J Adiciona um componente ao container&


na posi%"o indicada pelo 2o. par'metro. - (specifica um novo gerente de la)out para o container *ou sem la)out se for passado o valor null+.

validate# *

- ,eorgani-a o container e todos os seus componentes& se houve modifica%"o.


1G

'Co!%onent 0 totalmente 1wing/JF#


1 J Mma apar)ncia #=pluggable loo and !eel - pla!=* @ue pode ser especificada pe o
pro"ramador ou #opciona mente* se ecionada pe o usurio em tempo de e;ecuo+ 3ite para do'n oad:
5ttp://'''+ 2fprod+com/0avootoo+com/p af/sKnt5etica/inde;+p5p+

20

J#omponent
2 J 4iversos tipos de !orda* @ue tam%/m definem os imites do componente+

21

J#omponent
3 J $ 5a%i idade para definir o taman+o m;imo. mHnimo e preferido de um componente. mesmo se a te a for redimensionada+ , - -ool-ip: fai;a de te;to @ue aparece @uando o cursor passa so%re o componente+

5 J $ c asse ./ption0ane: vrias 0ane as de di o"os+ 3E usarPP


Qide "ialog"emo.java e #ustom"ialog.java+

22

J#omponent $ !(todos !ais usados


set-ool-ip-e(t# 3trin" te;t * set%order# Border % * set0referred#i$e# 4imension d * set1a(imum#i$e# 4imension d * set1inimum#i$e# 4imension d *
- registra o texto para ser mostrado em tooltip. o help sens$vel ao mouse. - atribui a borda do componente. - atribui o tamanho preferido. $eve ser

usado com gerenciador de la)out. - atribui o tamanho m.ximo permitido.

$eve ser usado com gerenciador de la)out. - atribui o tamanho m!nimo permitido.

$eve ser usado com gerenciador de la)out.


23

Icon

24

*con

+ imagens nos componentes

$ interface ,con / imp ementada pe a c asse 2mage2con. @ue permite associar ima"ens a o%0etos J9omponent+ Construtores: ImageIcon!Strin# 4ile0ame$ ImageIcon!URL url$ ImageIcon!/ma#e im#$ ,&e!%lo: ,con d R ne' ,ma"e,con # S///$:/du)e2+"if= *T ,con m R ne' ,ma"e,con # =midd e+"if= *T Java pode manusear: L,8. J2AL e J2L+

25

JFra

2>

')ra!e
1 o tipo mais especia iDado de 0ane a Java+ 2ossui uma barra de t$tulo e uma borda+ J8rame / derivado do contro e da $&(+ 2ermite intera!es atrav/s de tec ado e mouse+ ,nc uir no cEdi"o: import 3ava(4s5ing467 1 um container: pode conter outros componentes+ 2ara a terar o Hcone da 0ane a. consu te
#pecifying 8indo5 9ecorations:
http,--java.sun.com-docs-boo"s-tutorial-uis*ing-components-frame.html/set0efault!oo"AndFeel0ecorated

2ossui 5 su%containers+ 2or isso. / i"eiramente incompatHve com 0ava+a't+8rame. @ue no possui su%containers+ um "erenciador de aKout / automaticamente associado a cada um de seus su%containers+ % seguir&
2F

/s containers de JFrame

J
Content%ane

9onsu te: http://java.sun.com/products/jfc/tsc/articles/containers/index.html

28

/s containers de JFrame
1 - .:oot0ane: container principa de J8rame. "erencia os demais
su%containers+ 9o%re a superfHcie inteira da 0ane a. e;ceto a %arra de tHtu o e o taman5o da %arra+ 9onsu te:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html

2 - ."ayered0ane : adiciona profundidade a um container. permitindo


so%reposio de componentes. @uando necessrio+ Qe0a e;emp os em:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html/la)eredpane.

2G

/s containers de JFrame
3 - 1enu%ar: encapsu a os conceitos da p ataforma para os imites da %arra
de menu+ 2ara associar uma %arra de menu U 0ane a. c5amar setOenuBar+ B "erenciador de aKout defau t / o Bo;NaKout+ 9onsu te:
http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html

4 - Glass0ane: o paine de vidro. a vidraa+ 2ermite interceptar ou impedir


eventos de mouse. torna os componentes "rficos inacessHveis. em%ora visHveis+ 9onsu te:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html/glasspane

30

/s containers de JFrame
5 - Content0ane: / rea de tra%a 5o onde adicionamos diretamente nossos
componentes+ B "erenciador de aKout defau t / o %order"ayout+ 2ara o%ter este componente. e;ecute o%0Jane a+"et9ontent2ane# *+ 9onsu te:
http,--java.sun.com-docs-boo"s-tutorial-uis*ing-components-toplevel.html

31

JFrame
dispose# *

$ !(todos !ais usados


- Fecha a janela. - $etermina a opera67o

set9efaultClose/peration#intVoperao*

default para 0uando o usu.ro clicar no 1 da janela *fechar+.

(ipos de operao:
2 JFrame.0O89O):I9#8O98C!O'E #definido em &indo'9onstants*: nada acontece.
pois re@uer @ue o pro"rama manipu e a operao no m/todo 'indo'9 osin" do evento &indo'Nistener re"istrado pe o o%0eto @ue "erou a ao+

2 JFrame. :I0E8O98C!O'E #definido em &indo'9onstants*: automaticamente ocu ta a


0ane a apEs ser invocado @ua @uer o%0eto &indo'Nistener+ Aste / o va or defau t de J8rame+

2 JFrame. 0I'%O'E8O98C!O'E #definido em &indo'9onstants*: automaticamente


ocu ta e descarta a 0ane a apEs ser invocado @ua @uer o%0eto &indo'Nistener+

2 JFrame. E;I)8O98C!O'E #definido em J8rame*: automaticamente sai da ap icao


uti iDando o m/todo e;it# * da c asse 3Kstem+ $conse 5aJse @ue esta operao se0a usada apenas em ap ica!es+ 32

JFrame
pac'# *
3preferidos4&

$ !(todos !ais usados

- ,edimensiona a janela de tal forma 0ue todos os


seus componentes fi0uem com seus tamanhos obedecendo seus gerenciadores de la)out.

set"ocation:elative-o#9omponent c* - Se o par'metro for null& a


janela fica no centro da tela.

set-itle#3trin" titu o* set1enu%ar#OenuBar m* set:esi$a!le#%oo ean %*

- Atribui um t!tulo para a janela. - Atribui uma barra de menu 5 janela. - 6ermite& ou n"o& 0ue o usu.rio modifi0ue
o tamanho do 7rame& pelo uso do mouse.

add8indo5"istener#&indo'Nistener '* - Adiciona um listener


*observer+ para tratamento dos eventos da janela.
33

JFrame
import javax.swing.*; import java.awt.*;

0 e2emplo 1

9ublic class Exemplo1 extends JFrame : 9ublic static void main!Strin#;< ar#s$ : =>em9lo* b4 & ne' =>em9lo* !?2ela Sim9les?$% } 9ublic Exemplo1(String title) su9er!title$% setSi@e!()+" (++$% setAisible!true$% } }
34

JFrame

$ resultado

35

JFrame 0 e2emplo 2
import java.awt.*; import javax.swing.*; 9ublic class Exemplo! : 9rivate B3rame janela% 9ublic Exemplo!() : anela & ne' B3rame!?2ela =>em9lo(?$% anela7setSi@e!(++"(++$% "ontainer c # janela.get"ontent$ane(); c.setLaCout!null$% anela7setAisible!true$% D 9ublic static void main!Strin# ar#s;<$: =>em9lo( tela & ne' =>em9lo(! $% D D
3>

')ra!e: e&erc-cio 1 ; Wuanto U c asse E(emplo2 #s ide anterior*" no construtor especia iDado '(emplo) (*tring titulo). ap i@ue os re@uisitos:
2 2 2 2 2 2 2 )<tulo Cor de Fundo 0imens7o !a$out =esi>able %osi67o ?cone da barra de t<tulo : <A;ercHcio de J8rame= : #255. 255. 255* : ar"ura R 510 e a tura R 510 : nu o : fa se : centro da te a : %o;+sm+"if

@0icas, janela.set8ocation,elative o*+ e janela.set9con9mage*+.

2 J 8aa com @ue o construtor default c5ame o construtor especia iDado definido no item 1+
3F

#oas $rticas

38

Inter3aces gr43icas $ .oas %rticas


Bs atri%utos de instXncia devem ter visi%i idade private+ Bs m/todos de instXncia devem ter visi%i idade pu% ic+ 2or e"i%i idade. dec are os atri%utos preferencia mente o"o no inHcio da c asse+ (am%/m podem ser dec arados ao fina . apEs todos os m/todos+ ,nstancie os atri%utos dentro do construtor. ou nos m/todos

correspondentes c5amados por e e+ 9onfi"ure a"rupadamente todas as caracterHsticas de um atri%uto+ 2ara tratar o prE;imo atri%uto. sa te uma in5a e recomece o mesmo processo+ 4ei;e para o fina da c asse a rea de adicionar atri%utos aos containers. isto /. a c5amada dos m/todos add + B setAisible!true$ deve aparecer como - tima instruo+
3G

Inter3aces gr43icas
<<imports im9ort 777 p%&lic class 'oas$raticas <<declara=>o 9rivate BPanel p% 9rivate B4rame % 9ublic 'oas$raticas () <<instancia=>o 9 & ne' BPanel!$% ...

$ boas pr4ticas + e&e!%lo

<<configura=>o de cada atri!uto 97setBacE#round!Color7GR==0$% ... <<adi=>o aos containers c7add!9$% 7777 } j.set(isi&le(tr%e); 9ublic static void main!Strin# ar#s;<$: 'oas$raticas tela & ne' 'oas$raticas ! $%

} }

40

Ca%astro&vento

41

A a%licao %ara os %r/&i!os e&erc-cios: Cadastro,#ento

42

&ventos %e 'anela

43

')ra!e

0 3ec5ar a 6anela aneiras+

( ) $oss*veis 1J 3air de toda a ap icao: +++++++++++++++++++++

2J Oudar o comportamento defau t do ? da 0ane a: +++++++++++++++++++++ 3J (ratar o evento de 0ane a #c icar no ? *. com anon+mous inner class& +++++++++++++++++++++
44

(ipos de operao:
2 JFrame.0O89O):I9#8O98C!O'E
#definido em &indo'9onstants*: nada acontece. pois re@uer @ue o pro"rama manipu e a operao
no m/todo 'indo'9 osin" do evento &indo'Nistener re"istrado pe o o%0eto @ue "erou a ao+

2 JFrame.

:I0E8O98C!O'E

#definido

em

&indo'9onstants*:

automaticamente ocu ta a 0ane a apEs ser invocado @ua @uer o%0eto &indo'Nistener+ Aste / o va or defau t de J8rame+

2 JFrame. 0I'%O'E8O98C!O'E #definido em &indo'9onstants*:


automaticamente &indo'Nistener+ ocu ta e descarta a 0ane a apEs ser invocado @ua @uer o%0eto

2 JFrame. E;I)8O98C!O'E #definido em J8rame*:

automaticamente sai

da ap icao uti iDando o m/todo e;it# * da c asse 3Kstem+ $conse 5aJse @ue esta operao se0a usada apenas em ap ica!es+

45

JFrame
Interface Listener

0 e7entos de 6anela
,-to%os # pu% ic void++*

Classe A%a$ter

&indo'Nistener

&indo'$dapter

'indo'$ctived# Findo'=vent e * 'indo'9 osed# Findo'=vent e * 5indo5Closing# Findo'=vent e * 'indo'4eactivated# Findo'=vent e * 'indo'4eiconified# Findo'=vent e * 'indo',conified# Findo'=vent e * 'indo'Bpened# Findo'=vent e *

2ara um componente do tipo 0ane a. c5ame add8indo5"istener # Findo'Listener '* e imp emente o m/todo correspondente de &indo'Nistener (vide tabela acima). A;emp o:
anela7addFindo'Listener! ne' Findo'.da9ter! $: 9ublic void window"losing!Findo'=vent '$:77777DD$% Oais deta 5es em: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/events/api+5tm + 4>

,#entos de 0anela: e&erc-cio


Ca c asse 9adastroAvento+0ava. imp emente uma c asse anYnima interna de &indo'$dapter @ue permita: a@ fec5ar a 0ane a atua # 3Kstem+e;it#0* * e !@ emitir um a erta de @ue a ap icao ser encerrada. c5amando o m/todo s5o'Bption4ia o" da c asse JBption2ane com os se"uintes parXmetros: 2 2 2 2 FrameApai: o frame principa Bensagem: 4ese0a mesmo fec5ar a ap icao [=+ )<tulo: <2er"unta= )ipo de op67o: JBption2ane+\A3]CB]B2(,BC+ 2 )ipo de mensagem: JBption2ane+WMA3(,BC]OA33$LA+ 2 2 2 ?cone: nu o+ Arra$ de op6Ces: arraK de B%0ect com as op!es <3im= e <Co=+ Op67o default: <3im= #posio Dero*+

Z9onsu te o m/todo set9efaultClose/perationAint i@ de J8rame para sa%er como proceder se o 4F usurio retroceder na sua deciso de fec5ar a 0ane a da ap icao+

J#utton

48

1ot2es
Bs %ot!es podem conter te;to e Hcone+ Iea"em a eventos de ao ou de item+

.:adio%utton: %oto de se eo a"rupada

.C+ec'%o(: %oto de se eo independente

.%utton: %oto comum .1enu2tem: em formato de %oto 4G

J!utton
Interface Listener

0 e7ento de a89o
,-to%o # pu% ic void++* action0erformed# .ction=vent e*

Classe A%a$ter

$ctionNistener

JJJJJJJJJJJJ

2ara um componente do tipo %oto ou outro @ue aceite evento de ao. c5ame addBction"istener # .ctionListener a* e imp emente o -nico m/todo action2erformed (vide tabela acima). A;emp o: botao7add.ctionListener! ne' .ctionListener! $: 9ublic void action$er+ormed!.ction=vent a$: 77777 DD$% O/todo importante @ue pode ser usado dentro do action2erformed: ) getSo%rce( )* retorna o o%0eto #do tipo B%0ect* @ue "erou o evento+

Oais deta 5es em: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/events/api+5tm +

50

,#ento de ao: e&erc-cio


Ca c asse CadastroEvento43ava:

jbConfirma:
Bo clicar: mostrar a mensa"em <$o no imp ementada+=. usando o m/todo s5o'Oessa"e4ia o" da c asse JBption2ane+ 2mplementa=>o: c asse interna c5amada Avento9onfirma #imp ements de $ctionNistener*+

jbCancela:
Bo clicar: fec5ar a 0ane a. c5amando a imp ementao feita para 'indo'9 osin". dentro do action2erformed+ 2mplementa=>o: c asse anYnima interna+ "ica&
janela.dispatch(vent * new :indow(vent * janela& :indow(vent.:9;$<:=>8<S9;?++@ 51

JCo .o#o/

52

J#ombo!o2

Oais deta 5es em: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/components/com%o%o;+5tm

53

J#ombo!o2
Interface Listener Classe A%a$ter

0 e7ento de item
,-to%o # pu% ic void++* item#tateC+anged# /tem=vent e*

,temNistener

JJJJJJJJJJJJ

2ara um componente do tipo J9om%oBo; ou outro @ue aceite evento de item. c5ame add2tem"istener # /temListener a * e imp emente o -nico m/todo item3tate95an"ed (vide tabela acima). A;emp o: Combo7add/temListener! ne' /temListener! $: 9ublic void itemState",anged!/tem=vent e$ : i4!e7#etStateC-an#e! $ && /tem=vent7SE-E".E/$: 7777777 DDD$% 2mportante: J9om%oBo; tam%/m pode rea"ir a evento de ao+ Oais deta 5es em: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/events/api+5tm +
54

J#ombo!o2

0 e7ento de item

.:todos importantes ;ue podem ser usados dentro do item1tate#5anged : getSo%rce( )* retorna o o%0eto #do tipo B%0ect* @ue "erou o evento+ getItem( )* retorna o componente associado ao item cu0o estado ten5a mudado+
8re@^entemente. o retorno / uma 3trin" contendo o te;to so%re o item Co caso de uma ista de itens #Nist*. e e / o inteiro #,nte"er* @ue do item se ecionado+ se ecionado+ especifica o Hndice

getItemSelecta&le( )* retorna o componente @ue "erou o evento #item*+ getState",ange( )* retorna o novo estado do item. @ue pode ser 3ANA9(A4
e 4A3ANA9(A4+
55

,#ento de ite!: e&erc-cio

Ca c asse CadastroEvento43ava: jcb9ome:

Bo selecionar um item: preenc5er o campo 0tfAmai . conforme a se"uinte re"ra: J login: iniciais do nome se ecionado _ - timo so%renome+ J domCnio: `cadastroevento+com+%r 2mplementa=>o: c asse anYnima interna++

Dicas: -use e.getItem().toString() para o item selecionado. -use StringTokenizer de java.util; -use o mtodo charAt(0) de String. 5>

Loo0 An% Feel

5F

LookAnd)eel: curiosidade
CadastroEvento43ava : a* 9riar um diretErio para os temas+ %* ,nc uir o Noo)$nd8ee +Dip no build path+ c* Asco 5er o tema dese0ado. no m/todo main+

trC : S0in-oo01ndFeel.setS0in(S0in-oo01ndFeel.load.,eme$ac0! GG?aquat-eme9acE7@i9?$$% GG?bb t-eme9acE7@i9?$$% GGcin@a com contorno a@ul GG?beost-eme9acE7@i9?$$% GGcin@a claro e cin@a escuro GG?macost-eme9acE7@i9?$$% GGcin@a claro e cin@a escuro

2modernt,emepac0.3ip2));

GGverde !cantos arredondados" c-ecEbo> com H$

GG?'-istlert-eme9acE7@i9?$$% GGverdeGa@ul !ob etos quadrados$ GG?>9lunat-eme9acE7@i9?$$% GGverdeGa@ul !ob etos com borda"seleo em verde$ S0in-oo01ndFeel.ena&le(); Dcatc-!=>ce9tion e$:SCstem7out79rintln!?Ocorreu erro no LooEI3eel ?Je$%D "adastroEvento tela # new "adastroEvento( ); }

58

1erencia%ores %e la2out

5G

')ra!e

0 inserir componentes
aneiras+

( 3 $oss*veis

1J $dicionar os componentes em oca iDao fi;a (absolute positioning). usando:


set"ayout #nu * add # 9omponent c * set"ocation # int ;. int K * set#i$e # int ar"ura. int a tura * set%ounds # int ;. int K. int ar"ura. int a tura *

2J Msar "erenciador de aKout para contro ar a oca iDao dos componentes em 0ane as e pain/is+ Bs principais m/todos so:
set"ayout # NaKoutOana"er m * add # 9omponent c * ou add # 9omponent c. int i * set0referred#i$e # 4imension d *

>0

')ra!e 0

gerenciadores de la<out

>1

')ra!e 0

gerenciadores de la<out

>2

')ra!e 0
im9ort im9ort ava7a't7K% ava>7s'in#7K%

gerenciadores de la<out $ e2emplo

9ublic class 'order-a4o%t/emo e>tends B3rame : 9ublic static void main!Strin# ar#s;<$ : BorderLaCout1emo Container c & & ne' BorderLaCout1emo!$% 7get"ontent$ane!$%

7set2itle!?BorderLaCout?$% c7set-a4o%t !ne' 'order-a4o%t!$$% c7add !ne' Button !?.rea 0orte?$"'order-a4o%t.567.8$% c7add !ne' Button !?.rea Sul?$"BorderLaCout7S69.8$% c7add !ne' Button !?.rea Leste?$"BorderLaCout7E1S.$% c7add !ne' Button !?.rea Oeste?$"BorderLaCout7:ES.$% c7add !ne' Button !?.rea Centro?$"BorderLaCout7"E5.E7$% 79acE!$% 7setAisible!true$% DD
>3

')ra!e 0

gerenciadores de la<out + dicas

2odeJse simp ificar um aKout pe o a"rupamento de componentes em containers do tipo J2ane #visHveis ou invisHveis*+ Exemplo & distribuir componentes no #ontent,ane de um -.rame. 2odeJse usar pain/is dentro de pain/is e cada um de es sendo contro ado por um "erenciador de aKout diferente. o @ue tam%/m au;i ia a distri%uio dos componentes visuais+ Exemplo & bot/es posicionados com dist0ncias hori1ontais di!erentes. 1 possHve atri%uir pain/is Us reas dos "erenciadores de aKout #os @ue assim o permitam* e ap icar a cada uma dessas reas um novo "erenciador+ Exemplo & 2uando no se consegue um boa distribuio direta (sem -,anel) dos componentes na 3rea disponibili1ada por um 4order5a+out. >4

')ra!e 0

gerenciadores de la<out + e&erc-cio

Ca c asse CadastroEvento43ava* a tere o "erenciador de aKout do 9ontent2ane para 8 o'NaKout. com os se"uintes parXmetros:
2 Alinhamento : 8 o'NaKout+9AC(AI 2 Espa6amento hori>ontal : 1F 2 Espa6amento vertical : 1F

>5

'3anel
1 um container: tem o propEsito de a"rupar componentes para serem inseridos posteriormente em outro container. at/ mesmo outros pain/is+ 9om isso. permite a criao de aKouts sofisticados+ Mti iDa o "erente de aKout 8 o'NaKout como padro+

Construtores: J$anel() J$anel(LaCoutLana#er l)

>>

JPanel $ e2emplo
im9ort ava7a't7K% im9ort ava>7s'in#7K% 9ublic class Panel1emo : 9rivate BPanel 9ainel.@ul% 9rivate BPanel 9ainelAermel-o% 9rivate B3rame anela1emo% 9ublic Panel1emo!$ : 9ainel.@ul & ne' BPanel!$% 9ainelAermel-o & ne' BPanel!$% anela1emo & ne' B3rame!$% Container c & anela1emo7#etContentPane!$% c7setLaCout!ne' 3lo'LaCout!$$% anela1emo7setSi@e!(++"(++$% 9ainel.@ul7setBacE#round!Color7blue$% 9ainelAermel-o7setBacE#round!Color7red$% 9ainel.@ul7setPre4erredSi@e!ne' 1imension!)+")+$$% 9ainelAermel-o7setPre4erredSi@e!ne' 1imension! *++"*++$$% c7add!9ainel.@ul$% c7add!9ainelAermel-o$% anela1emo7setAisible!true$% D 9ublic static void main!Strin#;< ar#s$ : >F Panel1emo 9 & ne' Panel1emo!$% D D

JPanel 0 e2erccio
a c asse CadastroEvento43ava* acrescenteJ 5e 3 atri%utos privados do tipo J2ane + Asses atri%utos devero ser instanciados no construtor da c asse atua e adicionados ao 9ontent2ane+ painel)itulo:
Cor de fundo: cinDa c aro -aman+o: a0uste com set2referred3iDe para ar"ura R 450 e a tura R 1F0+ "ayout: manter o defau t. com os parXmetros #8 o'NaKout+NA8(. 15. >*+

painelOrgani>ador:
Cor de fundo: cinDa c aro -aman+o: a0uste com set2referred3iDe para ar"ura R 450 e a tura R 180+ "ayout: manter o defau t. com os parXmetros #8 o'NaKout+NA8(. 15. >*+

painelBotoes:
Cor de fundo: amare o -aman+o: a0uste com set2referred3iDe para ar"ura R 450 e a tura R >3+ "ayout: manter o defau t

>8

FI M
>G

!ibliogra3ia
9orne . LarK+ 9ore JavaT traduo 4anie QieiraT reviso t/cnica Iodri"o
Iodri"ues+ 3o 2au o. Oa)ron Boo)s. 1GGF+ Ac)e . Bruce+ (5in)in" in Java+ 2rentice ?a 2(I. M3$. 1GG8+ 9ampione. OarK+ (5e Java (utoria : o%0ectJoriented pro"rammin" for t5e internet+ $ddison &es eK Non"man. 9a iforniaJ M3$. 1GG8+ 4eite . ?+ O+T4eite . 2+ J+ Java. 9omo 2ro"ramar+ 3a+ edio 7 2orto $ e"re: Boo)man. 2001+ Java (utoria : 5ttp://0ava+sun+com/docs/%oo)s/tutoria /0ava/(B9+5tm bnutsand%o ts+ J$Q$ 3'in" #J89* : 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/(B9+5tm bstart+ J$Q$4B9: 5ttp://0ava+sun+com/02se/1+4/docs/api/inde;+5tm + 9 asses Assenciais Java: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /essentia /(B9+5tm + J$Q$ &BIN4 e 9BIA J$Q$: 5ttp://'''+0ava'or d+com/c5anne ]content/0'JcoreJinde;+s5tm +

F0