Upload
dangkhanh
View
235
Download
0
Embed Size (px)
Citation preview
JavaTM Deployment CourseJava e Engenharia de Software Orientada a Objetos
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment CourseCopyrightCopyrightCopyrightCopyright © 1999,© 1999,© 1999,© 1999, bybybyby Jorge H. C. Fernandes (Jorge H. C. Fernandes (Jorge H. C. Fernandes (Jorge H. C. Fernandes (jhcfjhcfjhcfjhcf@@@@didididi....ufpeufpeufpeufpe.br).br).br).br)
Todos os direitos reservados. Nenhuma parte desta publicação podTodos os direitos reservados. Nenhuma parte desta publicação podTodos os direitos reservados. Nenhuma parte desta publicação podTodos os direitos reservados. Nenhuma parte desta publicação pode e e e ser reproduzida, armazenada em sistema deser reproduzida, armazenada em sistema deser reproduzida, armazenada em sistema deser reproduzida, armazenada em sistema de retrievalretrievalretrievalretrieval, ou transmitida, , ou transmitida, , ou transmitida, , ou transmitida, em quaisquer formas, ou através de quaisquer meios, eletrônicos,em quaisquer formas, ou através de quaisquer meios, eletrônicos,em quaisquer formas, ou através de quaisquer meios, eletrônicos,em quaisquer formas, ou através de quaisquer meios, eletrônicos,mecânicos, fotocópias, gravações,mecânicos, fotocópias, gravações,mecânicos, fotocópias, gravações,mecânicos, fotocópias, gravações, etcetcetcetc, sem a prévia autorização, por , sem a prévia autorização, por , sem a prévia autorização, por , sem a prévia autorização, por escrito, de Jorge Henrique Cabral Fernandes. escrito, de Jorge Henrique Cabral Fernandes. escrito, de Jorge Henrique Cabral Fernandes. escrito, de Jorge Henrique Cabral Fernandes.
All rights reservedAll rights reservedAll rights reservedAll rights reserved. No. No. No. No part of this publication may be reproducedpart of this publication may be reproducedpart of this publication may be reproducedpart of this publication may be reproduced,,,,stored instored instored instored in aaaa retrieval systemretrieval systemretrieval systemretrieval system,,,, or transmittedor transmittedor transmittedor transmitted,,,, in any formin any formin any formin any form,,,, or by any or by any or by any or by any meansmeansmeansmeans,,,, electronicelectronicelectronicelectronic,,,, mechanicalmechanicalmechanicalmechanical,,,, photocopyingphotocopyingphotocopyingphotocopying,,,, recordingrecordingrecordingrecording, , , , or or or or otherwiseotherwiseotherwiseotherwise,,,, without thewithout thewithout thewithout the priorpriorpriorprior consent of the publisherconsent of the publisherconsent of the publisherconsent of the publisher....
JavaJavaJavaJavaTMTMTMTM and and and and the Java the Java the Java the Java Logo are Logo are Logo are Logo are trademark of Sun Microsystemstrademark of Sun Microsystemstrademark of Sun Microsystemstrademark of Sun Microsystems....
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Meta
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Objetivos EspecíficosSob o ponto de vista da tecnologia Sob o ponto de vista da tecnologia Sob o ponto de vista da tecnologia Sob o ponto de vista da tecnologia JavaJavaJavaJava
�Introduzir Conceitos sobre�Modelo de Objetos�World Wide Web�Programação em Java
⌧Elementos da Linguagem⌧Programação Visual⌧Core APIs⌧Applets⌧JavaBeans
�Padrões de Design Orientado a Objetos�Programação Distribuída na Web
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Critérios de Entrada
�Domínio de técnicas de programação convencional
�Vontade de compreender a utilizar a tecnologia
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Critérios de Saída
1 - Java PrimerCapacidade de avaliação e desenvolvimento de
pequenos projetos em Java
2 - Técnicas AvançadasCapacidade de avaliação e desenvolvimento de
sistemas distribuídos de pequeno e médio porte
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Duas Fases
1 - Java Primer - 48h - 1 semanaCapacitam o aluno a estimar as potencialidades do uso
da tecnologia Java no desenvolvimento de projetos
2 - Java Avançado - 48h - 1 semanaIntroduzem técnicas avançadas de desenvolvimento de
software distribuído de pequeno, médio e grande porte usando Java
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Metodologia do Curso
�Aulas Teóricas�Aulas de Demonstração�Aulas de Laboratório�Exercícios Extra-Sala
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Bibliografia
� Aprenda em 21 dias Java 1.2, Laura Lemay, EditoraCampus.
� Livros da Addison-Wesley�Java Tutorial: Parte 1�Java Tutorial: Parte 2�Design Patterns (Gamma, Helm, Johnson e Vlissides)
� Documentação na Web (site da Sun ou local)�Especificação da Linguagem�Frameworks, APIs�Produção local no DI-UFPE
� Documentação do JBuilder
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Vamos nos Conhecer?
�Alunos �Instrutor
JavaTM e o Modelo de ObjetosJava Deployment Course: Aula 1
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Java e o Modelo de Objetos
Objetivos desta Aula
�Mostrar que o desenvolvimento de sistemas computacionais exige técnicas para dominar a complexidade
�Introduzir conceitos básicos do modelo de objetos
�Mostrar como herança e objetos podem criar sistemas polimórficos
�Criar um pequeno programa em Java
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Conteúdo
�Complexidade e Desenvolvimento de Software
�Evolução dos Modelos de Computação�Conceitos Básicos do Modelo de Objetos�Herança e Polimorfismo�Exercício simulado�Atividade de Laboratório
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Desenvolver Software é um Empreendimento Complexo
Requisitos
ProgramadoresEquipes
Bancos de Dados
Computadores
Redes
Projetos
Bibliotecas
FerramentasCódigo
Programas
Sistemas
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Alguns Níveis de Organização de Sistemas Computacionais
Aplicações
Bibliotecas
Ferramentas
Sistema Operacional
Hardware
Máquina Virtual
Linguagens
Frameworks
Domínios
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Evolução dos Modelos de Computação
�O Modelo de von Neumann�Programação Estruturada�Flexibilidade de Requisitos de Software�Modelo Entidade-Relacionamento�Modelo de Objetos�Evolução das Linguagens de Programação �Alcance do Modelo de Objetos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Modelo de von Neumann
� Anos 50� Código e dados compartilham a memória de uma forma
homogênea� Instruções podem ser vistas como dados e vice-versa� Não existe a noção clara de tipo de dados
Dados
Código
Unidade deControle
Processador
Memória
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Seqüência Desvio Laço
Programação Estruturada
� Anos 60� Impôs ordem ao código "espaghetti”� Não enfatiza a estruturação dos dados
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Requisitos de Software
� Variações nos Requisitos do Sistema �Produzem Grandes Variações no Código�Produzem Menor Impacto sobre os Dados
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Modelo Entidade-Relacionamento (MER)
� Anos 70� Modelagem semântica dos dados� Entidades contém atributos� Associações entre entidades se chamam
Relacionamentos
Banco
Movimenta Conta
Gerencia
Cliente
Atende
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O Modelo Entidade-Relacionamento
Procedimentos
SGBD
� privilegia a integridade dos dados em detrimento da modularização do código
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O Modelo de Objetos
Procedimentos
Dados
Objetos
�Anos 80�surge a partir da fusão de técnicas de
estruturação de código com técnicas de estruturação de dados
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Alcance dos Conceitos do Modelo de Objetos
Aplicações
Bibliotecas
Ferramentas
Sistema Operacional
Hardware
Máquina Virtual
Linguagens
Frameworks
Domínios
O Modelo
de Objetos
Conceitos Básicos do Modelo de Objetos (1/2)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O Quê é um Objeto?
�Um componente de software bem definido, que está presente em um programa em execução�Apresenta um conjunto de atributos e métodos
�Possui uma identidade e um comportamento bem definidos
�Ocupa espaço na memória, assim como um processo (programa em execução)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
debite()
credite()
emiteExtrato()
saldo
transações
Métodos de interagir como objeto
Atributos do objeto
Representação Gráfica de um Objeto
numero
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Atributos de um Objeto
�Os atributos de um objeto são armazenados no interior destes, através de VARIÁVEIS ou CAMPOS
�Os campos de um objeto AGREGAM�Valores primitivos (inteiros, bytes, etc) e�Referências a outros objetos
�O valor dos campos de um objeto em um determinado momento forma seu ESTADO
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Objetos Agregando outros Objetos
Banco
Contas[]
Transação[]
Conta Conta
Débito Crédito Débito Débito Débito
Transação[]
Conta
Credito Crédito
Transação[]
Clientes[]
Cliente
Cliente
Cliente
Cliente
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Método
�É a porta exterior através do qual se interage com o objeto
�Um método é definido pela sua assinaturae pelo código que executa quando invocado
// O método debite descreve o que uma// conta bancária deve fazer quando debitando
void debite(int valor, String data) {saldo = saldo - valor;...
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Banco Conta
contaBancaria.debite(100, “11/5/1996”);
contaBancaria
Mensagem
�Corresponde à invocação de método de umobjeto (chamado) por outro objeto (chamador)
debite(100, “11/5/1996”)
Mensagem
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Qual o Saldo da Conta Após a Invocação do Método Credite?
debite(100, “11/5/1996”)
Mensagem
Conta
saldo=300
Conta
saldo=?
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classes
�São o código que define o comportamento dos objetos
�São moldes para criação de objetos�A classe é responsável pela criação dos
objetos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Representação Gráfica de uma Classe e Vários Objetos
ContaBancária Conta #1
Conta #3
Conta #2
Conta #4debite()credite()
emiteExtrato()debite()credite()
emiteExtrato()
debite()credite()
emiteExtrato()
debite()credite()
emiteExtrato()
debite()credite()
emiteExtrato()
saldotransações
numero
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
newnew
new
newnew
new
new
new
Criação de Algumas Contas e Transações
Crédito
Conta
Débito
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Definindo a Classe ContaBancária em Java
public class ContaBancaria {private int numero;private int saldo;private Transacao[] transacoes;
// método construtorpublic ContaBancaria(int numero) {...}
// métodos de instânciapublic void debite(int valor, String data) { ... }public void credite(int valor, String data) { ... }public void emiteExtrato() { ... }
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Criando Contas Bancáriasclass ContaBancaria
ContaBancaria(int)
ContaBancaria(int) Método construtor
numero
numero Atributo (variável de instância)
debite(int, String)
debite(int, String) Método (de instância)
Banco
new ContaBancaria(1);#1
new ContaBancaria(2);
#2
new ContaBancaria(33); #33
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Criando Contas Bancárias
�Três contas bancárias criadas dentro de um banco.
class Banco {ContaBancaria conta1, conta2, conta33;public void crieTresContas() {conta1 = new ContaBancaria(1);conta2 = new ContaBancaria(2);conta3 = new ContaBancaria(33);
}...
}
Exercício: Encontrando Classes e Objetos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Onde Estão as Classes, Objetos, Métodos e Atributos?
�De um sistema de �Gestão de pessoal?�Tributação?�Controle de tráfego aéreo?�Hospitalar?�Automação fabril?�etc
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Conceitos Básicos do Modelo de Objetos (2/2)
�Herança�Interfaces�Polimorfismo
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Herança
�Permite definir uma nova classe como especialização de outra já existente
�Superclasse �classe básica pré-existente�generalização de um conceito
�Subclasse�especialização da superclasse�refinamento de um conceito
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
ContaBancária
debite()credite()
emiteExtrato()
saldotransações
numero
ContaCorrente
emiteTalonario()
talonarioContaEspecial
calculaJuros()
limite
ContaPoupança
debite()credite()
aniversarioMes()
corrMonetariajuros
Herda(é uma)
Herda(é uma)
Herda(é uma)
Herança entre Classes de uma Aplicação Bancária
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe e Objeto ContaCorrente
class ContaCorrente extends ContaBancaria {
int talonarios;
public void emiteTalonarios() {...}
}
ContaCorrente
debite()
credite() emiteExtrato()
saldotransações
numero
emiteTalonario()
talonario
new ContaCorrente(1)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe ContaEspecial
class ContaEspecial extends ContaCorrente {
int limite;
float calculaJuros() {...}
}
ContaEspecial debite()
credite() emiteExtrato()
saldotransações
numero
calculaJuros()
limite
new ContaEspecial(1)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classe Poupanca
class Poupanca extends ContaBancaria {
float juros, corrMonetaria;
void aniversarioMes();
}
ContaPoupancadebite()
credite() emiteExtrato()
saldotransações
numero
aniversarioMes()
juros
new ContaEspecial(1)
corrMonetaria
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Benefícos da Herança
�Fatoração e redução do tamanho docódigo
�Estruturação do código�Aumenta a reutilização de código�Redução do esforço de evolução da
aplicação�Melhoria geral da qualidade do código
Exercício: Classes e Relacionamentos de Herança
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Onde aplicar Herança às Classes?
�De um sistema de �Gestão de pessoal?�Tributação?�Controle de tráfego aéreo?�Hospitalar?�Automação fabril?�etc
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Polimorfismo
�Técnica para criação de código adaptável a mudanças, o que reduz o esforço de manutenção de código
�Baseia-se na separação entre a interface e a implementação de métodos, e no uso de herança
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Ferramentas Convencionais
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Polimorfismo e o Kit deSoquetes
�Usando ferramentas convencionais�Vantagens do Kit de Soquetes�Uma definição polimórfica para o “Kit”�Uma interpretação orientada a objetos para o
“Kit”�Uma implementação em Java do “Kit”�Avaliando o impacto de alterações no “Kit”
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Uma Definição Polimórficapara o “Kit”
�O ato de girar uma chave de torção acoplada a um soquete pode ser usado em várias situações distintas
�Todos os soquetes tem uma mesma interface com a chave, que neste caso é um orifício quadrado
�Sem conhecimento da chave de torção, cadasoquete tem um acoplador especial, adaptado a porcas de tamanho diferente
�Para usar a mesma chave e método de torção ao se criar um novo formato de porca é preciso apenas criar um novo soquete
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Uma Implementação em Javado “Kit de Soquetes” (1)
�Criar uma classe (abstrata) chamada Porca, para agrupar todas as classes de porca.
abstract class Porca {
int faces;
/* Método abstrato (sem implementação) */
abstract void acopleETorca();
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Uma Implementação em Javado “Kit de Soquetes” (3)
�Criar uma subclasse de porca para cada tamanho de porca diferente
�Cada classe deve fornecer sua implementação específica para o métodoacopleETorca.
Porca
Porca10mm
Porca12mm
Porca8mm
Interfaces: Solucionando Problemas na Evolução de Código Polimórfico
O Kit de Soquetes Contra-Ataca
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Novos Usos para o “Kit”: Apertando Parafusos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Parafuso é uma Porca?
Porca
Porca10mmPorca12mm
Porca8mm
Parafuso8mm
Parafuso
Parafuso10mmParafuso12mm
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Reescrevendo o Cliente do Método Polimórficoclass ChaveDeTorcao {
/* Aperta qualquer porca */void aperte(Porca porca) {
porca.acopleETorca();}
}
class ChaveDeTorcao {/* Aperta qualquer roscável */void aperte(Roscável r) {
r.acopleETorca();}
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Problemas com Herança Múltipla
�são solucionados em Java através do uso de interfaces
�Separação entre subclasses e subtipos�Classe
�Descreve as propriedades fundamentais de um objeto
�Interface�Descrevem papéis desempenhados por um
objeto em determinadas situações
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Roscável (Interface ou Classe?)
abstract class Roscável {
abstract void acopleETorca();
}
interface Roscável {
void acopleETorca();
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Interfaces Roscável, Oxidável e Reciclável
abstract class Roscável {abstract void acopleETorca();
}
interface Roscável {void acopleETorca();
}
interface Oxidável {String índiceOxidação();
}
interface Reciclável {String categoriaReciclagem();
}
Exercício Simulado: Criação do Sistema de Controle Bancário
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Controle de Conta Bancária
�Definir classes �ContaBancária, Transação, TransaçãoDébito e
TransaçãoCredito
�Elaborar um esquema polimórfico de emissão de extrato bancário que utilize as classes acima
�Elaborar código que cria uma ContaBancária, realiza algumas transações de crédito e débito e emitir um extrato
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Transação: Projeto
�Estado formado pelo valor e data�Métodos:
�Construtor (valor e data)�Emite linha de extrato (abstrato)�Recupera valor da transação�Recupera data da transação�Indica qual a variação que a transação
realiza sobre o saldo da conta (abstrato)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Transação:Esqueleto de Código
abstract class Transacao {
int valor;
String data;
Transacao(int valor, String data) {..}
int getValor(){..}
String getData() {..}
abstract int getVariação();
abstract void emiteLinhaExtrato();
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
TransaçãoCrédito:Projeto e Implementação
�Herda de transação�Implementa métodos abstratos de
transação�Emite linha de extrato�Indica a variação POSITIVA que a
transação realiza sobre o saldo da conta
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
TransaçãoDébito:Projeto e Implementação
�Herda de transação�Implementa métodos abstratos de
transação�Emite linha de extrato�Indica a variação NEGATIVA que a
transação realiza sobre o saldo da conta
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
ContaBancária: Projeto
�Estado formado pelo número da conta, saldo anterior e transações efetuadas
�Métodos:�Construtor (número da conta)�Recupera número da conta�Recupera saldo atual da conta�Lança débito (valor e data)�Lança crédito (valor e data)�Emite extrato
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
ContaBancária: Implementação
�O saldo inicial da conta é sempre 0�Saldo armazenado como inteiro (int),
representa o saldo antes de efetivar as transações (saldo anterior)
�Transações são armazenadas em um array de tamanho fixo
�Emissão de extrato efetuada através da saída padrão (System.out.println())
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
ContaBancária: Esqueleto de Código
class ContaBancaria {
int numero;
int saldoAnterior;
Transacao[] transacoes;
ContaBancaria(int numero) {..}
int getNumero(){..}
int getSaldoAtual() {..}
void debite(int valor, String data) {..}
void credite(int valor, String data) {..}
void emiteExtrato() {..}
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exercício Simulado:Usando o JBuilder
�Familiarizando-se com a interface�Criação de projetos e classes�Criação do HelloWorld
�Criação do Sistema de Controle de Conta Bancária definido anteriormente
JavaTM AppletsJava Deployment Course: Aula 2
por Jorge H. C. Fernandes ([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Java Applets
Objetivos desta Aula
�Introduzir conceitos, propriedades e aplicações das tecnologias de código móvel na Web
�Mostrar como funciona o modelo de applets Java na Web
�Criar a Applet HelloWorld usando Java e o JBuilder
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Java Applets
�Java e a Web�Código Móvel�Applets Java
�Definição�Usos�Criação
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Cliente
Código Móvel
Tecnologia de linguagens e plataformas de sistemas distribuídos que suportam a construção de programasde computador que são:�instalados em servidores,�transferidos sob demanda para clientes,�executados de forma segura na plataforma dos clientes.
Servidor
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Características Desejáveis de Tecnologias de Código Móvel
�Execução segura (sandbox)�Multiplataforma, sem recompilação�Multimídia�Transparência e performance aceitáveis
na transmissão, instalação e execução�Facilidades para desenvolvimento�Baixo investimento no uso�Massa crítica de desenvolvedores e
usuários
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Cenários de aplicação das Tecnologias de Código Móvel
�Suporte a agentes móveis em software�Educação e treinamento interativos na
Web�Bibliotecas Digitais�Comércio Eletrônico
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Tecnologias de Código Móvel Representativas
�Java�JavaScript�ActiveX�TCL/Tk (Sunscript)�Obliq�Penguim
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Tecnologia de Código Móvel Java
�Programas compilados são um conjunto de classes�O código gerado é arquiteturalmente neutro,
executado sobre uma máquina virtual (bytecode)�Recursos nativos do sistema operacional são
tratados de modo abstrato e isolados através de um sandbox
�Biblioteca para Multimídia, Redes, etc�Aplicações
�Programação multimídia, Applets, Agentes Móveis, Aglets, JavaBeans, etc
Applets Java
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Applets
�“Pequenos” programas Java;�disponibilizados em Web servers;�hospedados dentro de páginas HTML.�O código do applet é copiado para o browser,
juntamente com a página HTML.�O código é executados por uma máquina virtual
instalada no browser.�A interface gráfica do applet ocupa uma área da
página HTML
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Criação de um Applet Java
�Construção e Compilação do Programa�Inserção de um Applet em uma Página
HTML�Acesso e Transferência do Código�Verificação do “bytecode”�Mensagens para um applet
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Inserção de um Applet em uma Página HTML
<html><body><h1>Este applet é bastante simples</h1><applet code=HelloWorld.class
width=100height=200>
<param name=“mensagem” value=“Olá pessoal”></applet></body></html>
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Funcionamento dos AppletsWeb Server
WWW(HTTP)
Web Browser
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Verificação do Bytecode
WWW(HTTP)
Web Browser
?
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Mensagens para um Applet
WWW(HTTP)
Web Browser
new
init() paint()
nome:stop() nome:
start()
destroy()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Framework Applet:Mensagens mais Importantes para um Applet (1)
�void init()�Enviada uma única vez, logo após a criação do
applet�void paint(Graphics g)
�Enviada sempre que o applet precisa atualizar a interface
�void start()�Enviada sempre que a página do applet é visitada
�void stop()�Enviada sempre que a página do applet é sobreposta
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Sandbox: Recursos Nativos doAmbiente de Execução Java
São isolados através de classes commétodos nativos internos, classesabstratas e interfaces
�Sistema de Arquivos�java.io
�Sistema de Interface Gráfica�java.awt, java.awt.peer, java.awt.image
�Comunicações em rede (sockets, etc)�java.net
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Restrições de Funcionamentodos Applets
Carregados viasistema de arquivos
Carregados via rede
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Usos mais comuns dos Applets
�Aplicações onde a interatividade e capacidade multimídia são importantes�Calculadoras�Planilhas�Mapas e Editores Interativos�Simuladores�Agendas�Instrumentos remotamente controlados
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exercício Simulado: Construção de um Applet
Programação Visual Java Deployment Course: Aula 3
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Programação Visual
Objetivos desta Aula
�Introduzir conceitos de programação visual, usando o JBuilder
�Criar uma pequena aplicação que contenha elementos básicos de interface gráfica para manipular contas bancárias
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Tópicos
�Modelo da Aplicação�Conexão entre Modelo e Interface�Interface da Aplicação
�Componentes da Interface Gráfica�Tratamento de Eventos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classes e Objetos do Modelo da Applicação ContaBancaria
Transacao
Crédito Debito
Conta
Débito Crédito Débito
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Conectando Interface e Modelo da Aplicação ContaBancária
Conta
Débito Crédito Débito
AplicacaoContaBancaria
contaBancaria
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Panel
BorderLayout
Label
PanelButton Button Button
Panel
Label TextField
Label TextField
GridLayout
GridLayout
Applicação ContaBancária: Esquema da Interface
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Aplicação ContaBancária:Tratamento de Eventos
AplicaçãoContaBancária
Panel
Conta Bancária
PanelCreditar Debitar Extrato
Data: 11/5/99
Valor: 500
Transacao[]
ContaBancária
ActionListener
ActionListener
ActionListener
Elementos da Linguagem JavaTM
Java Deployment Course: Aula 4
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Elementos da Linguagem Java
Objetivos desta Aula
�Fornecer um panorama geral da Linguagem Java�Características�Ferramentas básicas de desenvolvimento�Principais bibliotecas �Palavras reservadas�Tratamento de exceções�Criação de threads
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Elementos da LinguagemJava
�Linguagem Java: Características Gerais�JDK - Java Development Kit v. 1.1 e 1.2�Principais APIs
�Application Program Interfaces
�Palavras Reservadas
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Linguagem Java: Características Gerais� Sintaxe similar a C++� Objetos, classes e
interfaces� Herança simples e
múltiplas interfaces� Threads e monitores� Tratamento de exceções
� Tipos fortes, com “dynamic binding”
� Bytecode interpretado sobre máquina virtual
� Coleta de lixo � Sem aritmética de
ponteiros� Bibliotecas portáveis � Integração com C/C++
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Principais Ferramentas do JDK Java Development Kit 1.2
� javac�compilador
� java�interpretador
� javadoc�documentador de código
� appletviewer�visualizador de applets
� jdb�depurador simbólico
� jar�armazena recursos
� jarsigner�assinatura digital
� keytool�tratamento de chaves
� policytool�políticas de segurança
� rmic, rmiregistry�RMI
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
javaInterpretador Java
java
X.class
main(String[])
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Execução de um ProgramaJava
Máquina Virtual Java
Área de objetos
Área de Métodos Java
Sistema Operacional
com coleta de lixoÁrea de Métodos Nativos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
javadocDocumentador de Programas
X.java
javadocPáginaHTML
X.html
X
variable indexab
method indexint test()init()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Principais APIs de Suporte à Linguagem Java: Visão Geral
�java.lang�java.io�java.util�java.net�java.awt�java.applet
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
java.langSuporte Básico aos Elementos da Linguagem
� Principais Classes� Object� Boolean, Byte, Character, Double, Float, Integer, Long, Number, Short, Void� Class, ClassLoader� Math� SecurityManager� System, Runtime, Process� Thread, ThreadGroup� String e StringBuffer
� Interfaces� Runnable� Cloneable
� Exceções� Exception, ArritmeticException, ArrayIndexOutOfBoundsException, ...
� Erros de Runtime� Error, OutOfMemoryError, VirtualMachineError
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
System : Propriedades do Sistema
� Lendo e gravando da saída/entrada�System.out, System.in, System.err
� Set/Get Propriedades de Runtime�System.getProperties(String name)�System.setProperties(String name, String value)
� SecurityManager�System.getSecurityManager�System.setSecurityManager(SecurityManager)
� Coletor de Lixo�System.gc();
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
System.getProperties(String);
� Disponíveis para Aplicações e Applets� "file.separator"� "line.separator"� "path.separator"� "java.class.version"� "java.vendor"� "java.vendor.url"� "java.version"� "os.name"� "os.arch"� "os.version"
� Disponíveis para Aplicações� "java.class.path"� "java.home"� "user.dir"� "user.home"
� "user.name"
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
java.io
�File�InputStream�OutputStream File
File teste = new File(“Teste”)
TesteInputStream
new InputStream(teste)
OutputStreamnew OutputStream(teste)
read()write()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
java.util
Object s = v.elementAt(1);
Vector v = new Vector();
Object elementAt(int)
void addElement(Object)
a
v.addElement(new String(“a”));
1
b
v.addElement(new String(“B”));
23
v.addElement(v);
Vector v2 = (Vector) v.elementAt(3);
�Stack�Vector�Hashtable�Set�Dictionary�etc,
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
java.net
�URL�URLConnection�Socket
URLnew URL(“http://www.di.ufpe.br”)
URLopenStream()
Cliente
www.di.ufpe.br WWW(HTTP)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
java.awt
�Component, Container�Frame, Panel�Button, List
Panel
Panel panel = new Panel()
Buttonpanel.add(new Button(“Start”))
add()
Start
panel.add(new Button(“Stop”))
add()
Stop
panel.add(new Button(“Cancel”))
add()
Cancel
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exercícios
�Manipulação de StringBuffers�Leitura e Gravação de Arquivos�Leitura de URLs
Palavras Reservadas da Linguagem Java
Tipos de Dados Primitivosboolean
voidchar
byte short int long
float double
Literais
null
true false
Pseudo Variáveis
super
this
Desvio e Controle de Fluxo
if
for do while
break continue return
switch case default
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
if
if (<expressão-booleana>) {
<bloco-de-codigo-if>
} else {
<bloco-de-codigo-else>
}
� Calcula o valor da <expressão-booleana>. Caso o valor desta expressão seja verdadeiro, executa o <bloco-de-código-if>. O Caso <expressão-booleana> seja falsa executa o <bloco-de-código-else>.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
for, do, while, break,continue, return
� for
� do, while
for (int i = 0; i <= MAX; I++) {<bloco>if (..) break;<bloco>if (..) continue;<bloco>if (..) return;<bloco>
}
do {<bloco>} while (<expressão-booleana>}while (<expressão-booleana>) do {<bloco> }
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
switch, case, default
switch (<expressão>) {
case <constante-0> :
<bloco-de-código-0>
case <constante-1> :
<bloco-de-código-1>
...
case <constante-n> :
<bloco-de-código-n>
default :
<bloco-de-código-default>
}
Pacotes
package
import
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Pacotes: Exemplos
// este arquivo estar localizado em um subdiretório
// chamado banco
package banco;
// importa a classe applet do pacote java.applet
import java.applet.Applet;
public ContaBancaria extends Applet {
..
}
ContaBancaria.java
Modificadores de Visibilidade
private
protected
public
Modificadores Gerais de Métodos e Variáveis
abstract
final
native
static
synchronized
transient
volatile
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
static
� static
� Aplicado à declaração de uma variável ou método� Aplicado à declaração de uma variável indica que só existe uma
ocorrência desta variável no ‘runtime’, a qual está presente no objeto que representa a informação de 'runtime' da classe na qual a variável está declarada.
� Pode se dizer que uma variável static é uma variável de classe (à laSmalltalk).
� Aplicado à declaração de um método indica que o objeto (this) ao qual este método se referencia é o objeto que representa a informação de 'runtime’ da classe na qual o método está declarado.
� Pode se dizer que um método static é um método de classe.
Declaração de Classes e Métodos
class
extends
implements
interface
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classes Internas
class Queue {...private class EmptyQueueItem extends QueueItem {}..
}
class QueueItem { ...
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
interface, extends
interface <nome-de-interface>
extends <lista-de-interfaces> {
...
}
�Declara a interface <nome-de-interface>. �Opcionalmente a interface herda as declarações de
métodos e variáveis presentes em cada uma das interfaces referenciadas na <lista-de-interfaces>.
Criação de Objetos
new
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Inicialização de Arrays
String[] args = new String[] { “Ola” , “Pessoal”};
Teste de Compatibilidade de Tipos
instanceof
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
instanceof
public TesteInstanceOf {public static void main(String[] args) {Object o = new String("Nasce uma String!");if (o instanceof String) {System.out.println("É String ["+o+"]");
} else {System.out.println("Não é String ["+o+"]");
}if (o instanceof StringBuffer) {System.out.println("É StringBuffer ["+o+"]");
} else {System.out.println("Não é StringBuffer ["+o+"]");
}}
}
Exceções
trycatchfinallythrowsthrow
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
main()b()c()g()
main()
b()
c()
g()
b() c() g()main()
Pilha de Execução de umPrograma Java
new
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exceções: Tratandotry {<bloco-de-código>}catch (<declaração-de-variável-0>) {<bloco-tratador-exceção-0>
}catch (<declaração-de-variável-1>) {<bloco-tratador-exceção-1>
}...catch (<declaração-de-variável-n>) {
<bloco-tratador-exceção-n>}finally {<bloco-finalizador>
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Tratando Exceções: Exemplo
try {
URL myURL = new URL(”htt:/www.br”)
} catch (MalformedURLException e) {
. . .
// exception handler code here
. . .
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exceções: Declarando
� <assinatura-de-método> throws<lista-de-classes-de-exceções>
�Indica que o método declarado cuja assinatura é <assinatura-de-método> pode eventualmente levantar um objeto (exceção) de qualquer das classes de exceção presentes na <lista-de-classes-de-exceções>.
URL {
public URL(String urlString)
throws MalformedURLException {
...
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Levantando Exceções
� throw <objeto>
�Levanta para o "runtime" o objeto <objeto> como uma exceção
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Throwable, Errors e Exceptions
Throwable
Error
VirtualMachineError
LinkageError
...
...
... ...
Exception
ClassNotFoundException
RuntimeException
ArithmeticException
NullPointerException
...
...
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
synchronized
� synchronized� Aplicado à declaração de um método ou bloco de código� Aplicado à declaração de um método indica que a execução deste é
precedida pela aquisição de um monitor de bloqueio de acesso.⌧Se o método é static, o monitor de bloqueio é a classe à qual este método
pertence.⌧Se o método é de instância (não estático) o monitor de bloqueio é o objeto
(this) sobre o qual o método está sendo executado.
� A execução de um bloco de código anônimo também pode ser controlada por um monitor, através do formatosynchronized (<variável-monitor>) {
<bloco-de-código>
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
main()
b()
e()
c()
d()
g()
f()
run() run()
b() c()
d()
e()
d()
f()
g()main()
Threads em um Programa Java
�Métodos c(), d() e e() não synchronized
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Blocos de Código Synchronized
test {
public static void main(String[] args) {
Test t = new Test();
synchronized (t) {
synchronized(t) {
System.out.println(”Cheguei”);
}
}
}
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
f()e()
run()d()
Estados e Métodos de umThreadThread new Thread()
yield
new
run()start()
runnable
start
run()yield()
stop()
Estados de um Thread
not runnable
run()run()
death stopfim do método run
stop
stop
run()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Implementação de Threads
�Herdando da classe Thread ou de subclasses da classe Thread.
class MyThread extends Thread {}
� Implementando a interface Runnable e criando um thread.class MyThread extends Applet
implements Runnable {}
Copyright © 1997, by Recife Java Team.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Herdando da ClasseThread
Thread
RUN
MyThread
RUN RUN
Criação do objeto
Escalonador / Processador
RUNRUNRUN
RUNRUN
Copyright © 1997, by Recife Java Team.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O Applet Clock em Funcionamento
Browser
Página HTML
applet Clock
12:4812:4912:5012:5112:5212:53
Copyright © 1997, by Recife Java Team.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O Método start(): CriandoThreads
public void start() {if (updater == null) {
updater = new Thread(this);updater.start();
}}
Copyright © 1997, by Recife Java Team.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O Método paint(): Desenhando na Interface Gráfica
public void paint(Graphics pen) {
Data date = new Date();
pen.drawString(date.getHours() + “:” +date.getMinutes() + “:” +date.getSeconds(), 5, 15);
}
Copyright © 1997, by Recife Java Team.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exercício 1
�Crie e teste o applet Clock, como descrito nesta aula.
Interface Gráfica em JavaAWT Versus SwingJava Deployment Course: Aula 5
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Interface Gráfica em Java: AWT versus Swing
Objetivos desta Aula
�Mostrar a estrutura e funções dos componentes de GUI dos pacotes java.awt e javax.swing
�Mostrar o esquema de tratamento de eventos em Java 1.1
�Detalhar como se cria interfaces gráficas para programas Java
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
AWT Versus Swing
JavaTM is a trademark of Sun Microsystems.
Swing images where taken from Java Tutorial. Copyright © 1995-1999, by Sun Microsystems. All Rights Reserved.
Java Tutorial is available fromhttp://java.sun.com/docs/books/tutorial/index.html
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
AWT Versus Swing
�Look and Feel�Componentes AWT�Componentes Swing�Tratamento de Eventos em Java 1.1
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
AWT
�Pacote de componentes visuais do JDK 1.0.x
�Implementação baseada em peers�Look & feel varia de acordo com a
plataforma�Mínimo denominador comum entre
plataformas - Funcionalidade reduzida
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Componentes do AWT
�Components, Containers�Window
�Panel, Frame
�Atomic Compoents�Button, TextField, TextArea, Label, Choice,
Checkbox, List
�MenuBar, PopupMenu
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Ocorrência de Eventos� ActionEvent
�Usuário clica em um botão, pressiona return dentro de um textfield ou excolhe um item de menu
� WindowEvent�Usuário fecha uma janela
� MouseEvent �Usuário pressiona um botão do mouse quando o cursor está sobre um
componente� MouseMotionEvent
�Usuário move o mouse sobre um componente� ComponentEvent
� Componente fica visível� FocusEvent
� Componente recebe o foco do teclado� ItemEvent
� Seleção de uma tabela ou lista é modificada
Observadores de Eventos
Swing(Fonte: Java Tutorial, 1999)
�Implementação completamente feita em Java
�Look & feel plugável�Accessibility�Java2D�Drag & Drop
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Componentes do Swing
�Containers�Top Level
⌧Applet, Dialog, Frame�Uso Geral
⌧Panel, ScroolPane, SplitPane, TabbedPane, ToolBar�Uso Especial
⌧InternalFrame, LayeredFrame, RootPane�Controles Básicos
�Button, List, ComboBox, Menu, Slider, TextField�Displays de Informação
�Label, ProgressBar, ToolTip�Displays Editáveis
�ColorChooser, FileChooser, Table, Text, Tree
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exercícios
�Criação de interface gráfica avançada com Swing
Padrões de Design Orientado a Objetos: Design PatternsJava Deployment Course: Aula 6
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões de Design
Objetivos desta Aula
�Introduzir noção de padrões de design, especialmente aplicáveis à programação orientada a objetos
�Descrever e discutir a intenção, motivação, estrutura, participantes, aplicabilidade e conseqüência do uso de vários padrões de programação OO
�Mostrar a ocorrência de padrões de design nas várias APIs de Java
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões de DesignSites na Web
� Padrões de Design OO�http://hillside.net/patterns/patterns.html�http://gee.cs.oswego.edu/dl/cpj/ifc.html�http://st-www.cs.uiuc.edu/cgi-bin/wikic/wikic?JavaAWT�http://mordor.cs.hut.fi/tik-76.278/group6/awtpat.html
� Transactions and Accounts�http://c2.com/cgi/wiki?TransactionsAndAccounts�http://st-www.cs.uiuc.edu/users/johnson/Accounts.html
� Padrões para Processo de Desenvolvimento de Estrutura de Organizações�http://www.bell-labs.com/~cope/Patterns/Process/
� Padrões de Reengenharia�http://www.iam.unibe.ch/~famoos/patterns/
O Origem dos Padrões
Padrões compondo uma linguagem capaz de suportar a construção coletiva, dinâmica, integral, etc, de artefatos humanos (casas, cidades, programas de computador, organizações, empresas, etc).
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Christopher Alexander, O ModoIntemporal de Construir, 1977.
� Edifícios ou cidades estão vivos à medida em que são governados pelo modo intemporal de construção.
� É um processo que extrai ordem de nós mesmos. Ocorrerá espontaneamente, somente se nos permitirmos.�Lugares adquirem suas características a partir dos padrões de
acontecimentos que lá ocorrem.�Acontecimentos estão sempre relacionados com padrões
geométricos (de construção)�Padrões de construção podem estar “vivos” ou “mortos”�Se “vivos” solucionam conflitos,e se auto-alimentam�Se “mortos” nos levam ao conflito interior.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Uma Linguagem de Padrõespara um Jardim
Jardim Semi-Oculto
Jardim Espontâneo Pátios com Vida
Transição na Entrada
Terraço PrivadoOlhando para a Rua
Balcão de 1.80m
Conexão com a Terra
Banco de Jardim
Pomar
Lugar ÁrvoresLadeira em Terraços
Canto do Edifício
Local Público ExteriorEstufa
Lugar Ensolarado
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Complien’s Process and Organization Structure Patterns
� Size the Schedule � Organization Follows Market � Developer Controls Process � Architect Also Implements � Review the Architecture � Group Validation � Scenarios Define Problem � Named Stable Bases � De-Couple Stages� Hub-Spoke-and-Rim� Prototype � Take No Small Slips � Interrupts Unjam Blocking � Don't Interrupt an Interrupt
� Self-selecting team� Solo Virtuoso� Form follows Function � Domain Expertise in Roles� Phasing it In� Apprentice � Organization Follows Location � Organization Follows Market � Patron � Architect Controls Product � Planning and Architecture � Conway's Law � +23 ->
Uma Linguagem de Padrões para Programas OO
State
Memento Adapter Proxy
Bridge
Command
Chain of Responsibility
Singleton
Abstract Factory
Prototype
Template Method
Facade
Factory Method
Observer
MediatorStrategy
Decorator
Flyweight
Composite
Interpreter
Visitor
Iterator
Builder
AdicionandoOperações
AdicionandoOperações
EnumerandoFilhos
SalvandoEstado da Operação
CriandoComposições
AdicionandoResponsabilidades
a Objetos
Modificando Peleversus Entranhas
CompartilhandoComposições
DefinindoGramática
DefinindoTravessias
Definindoa Cadeia
CompostoUsando
EvitandoHisterese
CompartilhandoEstratégias
CompartilhandoEstados Compartilhando
Terminais
ConfigurarFábrica
Dinamicamente
ÚnicaInstância
ÚnicaInstância
ImplementadaUsando
GerenciamentoComplexo deDependências
Freqüentemente Usa
DefinindoPassos doAlgoritmo
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Elementos Essenciais de um Padrão de Design
� Nome�Resume em uma ou duas palavras: o problema, as soluções e
conseqüências do uso do padrão.� O Problema
�Descreve quando aplicar o padrão. Explica o problema e seu contexto. Sintomas e condições.
� A Solução�Elementos que constituem o design, seus relacionamentos,
responsabilidades e colaboradores.� As Conseqüências
�Resultados e compromissos decorrentes da aplicação do padrão.
�Impactos sobre a flexibilidade, extensibilidade, portabilidade ou desempenho do sistema.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Classes de Padrões de Design OO
�Criacionais�Tornam um sistema independente de como seus
objetos são criados, compostos e representados�Estruturais
�Tratam de compor classes e objetos para formar estruturas grandes e complexas
�Comportamentais�Tratam de algoritmos e como atribuir
responsabilidades entre objetos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Estruturais
� Tratam de compor classes e objetos para formar estruturas grandes e complexas
Adapter Composite
DecoratorFacade
FlyweightProxy
Bridge
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Observer(s)
30%, 20%, 50%
Padrões Comportamentais(2/2)
� Tratam de algoritmos e como atribuir responsabilidades entre objetos
Visitor
State Strategy
a() b()
a() b()
TemplateMethod()a(..);...b(..);
Visitor Visitor
30%, 10%, 60%
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Notação de Classes e Objetos
ClasseAbstrata
operaçãoAbstrata()
SubclasseConcreta1operação()
variávelDeInstância
referencia objetoagrega
cria
pseudo código
ClasseConcretaummuitos
umObjetoreferênciaAObjeto outroObjeto
variávelDeInstância
SubclasseConcreta2
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Estruturais
� Tratam de compor classes e objetos para formar estruturas grandes e complexas
Adapter Composite
DecoratorFacade
FlyweightProxy
Bridge
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Estruturais (2/2)
� Decorator - Decorador (Objeto) Anexa dinamicamente responsabilidades adicionais a um objeto. Provê uma alternativa flexível ao uso de herança como modo de estender funcionalidade.
� Facade - Fachada (Objeto) Provê uma interface unificada para o conjunto de interfaces de um subsistema. Define uma interface de alto nível que faz um subsistema mais fácil de usar.
� Flyweight - Peso-mosca (Objeto) Usa compartilhamento para suportar um grande número de pequenos objetos de forma eficiente.
� Proxy - Representante (Objeto) Provê um ponto de atendimento para que outro objeto possa controlar o acesso ao primeiro.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão Adapter
� Intenção�Converter a interface de uma classe em outra interface que
clientes possam utilizar. Compatibiliza classes, permitindo que trabalhem em conjunto.
� Motivação�Algumas vezes uma classe (de um toolkit) não é reusável
somente porque sua interface não é compatível com a interface de uma aplicação de um domínio específico.
�A solução é criar um objeto adaptador, que encapsule e filtre asespecificidades da classe adaptada, fornecendo uma interface que a aplicação espera utilizar
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Adaptee.specificRequest();
Client Target
request()
Adapter
request()
Adaptee
specificRequest()
Padrão (Object)AdapterEstrutura e Participantes
�Usando Composição
adaptee
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão AdapterConseqüências
� ClassAdapter�Adapta uma classe concreta, mas NÃO SUAS SUBCLASSES�Pode suprepor alguns comportamentos do adaptado, visto que é
uma subclasse da classe adaptada�introduz apenas um objeto, sem maiores indireções
� ObjectAdapter�Permite que um único Adapter trabalhe com muitos adaptados
(e suas subclasses)�Pode adicionar funcionalidade extra a todos os adaptados de
uma vez só�Torna difícil sobrepor o comportamento do adaptado.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão Bridge
� Intenção�Desacoplar uma abstração de sua implementação, de modo que
as duas possam variar independentemente.
� Motivação�Quando uma abstração pode ter várias implementações a
solução usual é acomodar todas as implementações através de herança
�No entanto, herança liga de forma permanente uma abstração a uma implementação
�O padrão Bridge permite colocar as abstrações e suas implementações em diferentes hierarquias de classes, e permite que variem de forma independente
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão BridgeAplicabilidade
� Use o Padrão Bridge Quando:�Você quer evitar ligação permanente entre uma abstração e sua
implementação. Pode ser, por exemplo, quando se deseja variar a implementação em run-time
�Tanto a abstração quanto a implementação devem ser extensíveis através de herança
�Mudanças na implementação de uma abstração não devem ter impacto sobre o cliente
�Você tem uma proliferação de classes, e quer evitá-las dividindo o objeto em duas partes
�Você que compartilhar uma implementação entre múltiplos objetos e este fato deve ser escondido do cliente.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão Composite
� Intenção�Compor objetos em estruturas de árvores para representar
hierarquias parte-todo. Permitir que clientes tratem de modo uniforme objetos individuais e suas composições.
� Motivação�Aplicações gráficas como editores de programação visual
permitem a construção de diagramas complexos a partir de componentes simples.
�O usuário agrupa vários componentes, criando um agregado. �Caso haja separação entre componentes primitivos e agregados
criam-se dificuldades no tratamento uniforme da edição�A solução é criar uma classe abstrata que representa tanto os
componentes primitivos como os agregados (containers)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão CompositeAplicabilidade e Conseqüências
� Use o Padrão Composite Quando:�você quer representar hierarquias de objeto parte-todo�Você quer clientes aptos a ignorar as diferenças entre
composições de objetos e objetos individuais. Clientes tratarão objetos de modo uniforme
� Conseqüências�Definição de hierarquias de classes consistindo de objetos
primitivos e compostos. Sempre que um cliente espera um objeto primitivo pode receber um objeto composto.
�Torna o cliente simples�Facilita a criação de novas classes de componentes (e
compostos)�Pode tornar o projeto excessivamente genérico
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão Decorator
� Intenção�Anexa dinamicamente responsabilidades adicionais a um objeto.
Provê uma alternativa flexível ao uso de herança como modo de estender funcionalidade.
� Motivação�Algumas vezes se quer adicionar responsabilidades a um objeto,
mas não à sua classe. Acontece, por exemplo, com criação de interfaces gráficas, quando se deseja acrescentar uma borda a um componente qualquer ou um scrollbar a uma área de texto.
�Uma forma de se acrescentar responsabilidades é através de herança, mas isto torna o projeto inflexível, pois a escolha da borda é definida em tempo de compilação. Neste caso o cliente não pode controlar como e onde decorar o componente com uma borda.
�Uma abordagem mais flexível é inserir o componente em outro objeto que adiciona a borda, um Decorator.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão DecoratorAplicabilidade
� Use o padrão Decorator:�Para adicionar responsabilidades a objetos individuais de forma
dinâmica e transparente, sem afetar outros objetos�Para responsabilidades que podem ser removidas�Quando extensão através de herança é impraticável. Algumas
vezes uma grande quantidade de extensões independentes são possíveis e seria necessário um imenso número de subclasses para suportar cada combinação possível entre elas.
�Quando uma definição de classe pode estar escondida ou não disponível para herdar.
� Conseqüências�Mais flexibilidade que herança�Evita incorporação forçada de comportamentos desnecessários�Um decorador e seu componente não são idênticos!�Uma porção de objetos pequenos
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão DecoratorExercícios
� Observe o uso do padrão Decorator no subconjunto de classes abaixo, do pacote java.io�Perceba que as classes FilterInputStream (e suas subclasses) e
ObjectInputStream implementam o padrão Decorator sobre InputStream
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Comportamentais(1/2)
� Tratam de algoritmos e como atribuir responsabilidades entre objetos
ChainOfResponsibility exec
Command
new
exec()
Interpreter&
|
b c
a *
Iterator
Mediator Memento
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Comportamentais
�Enquanto se concentram apenas na forma como os objetos são conectados, criam complexos fluxos de controle que são difíceis de seguir em runtime.
�De Classe�baseados no uso de herança
�De Objeto�baseados no uso de composição
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Comportamentais
� Chain of Responsibility - Encadeamento de Atendentes (Objeto) Evita acoplamento entre solicitantes e atendentes permitindo que mais de um objeto tenha chance de tratar da solicitação. Encadeia os atendentes e passa a solicitação através desta cadeia até que algum deles a trate.
� Command - Comando (Objeto) Encapsula uma solicitação no interior de um objeto, permitindo que se parametrize clientes com diferentes solicitações, filas ou registros de solicitações, suportando ainda o cancelamento de solicitações.
� Interpreter - Interpretador (Classe) Dada uma linguagem, cria uma representação para a gramática da linguagem, juntamentecom um interpretador que utilizar esta representação para interpretar sentenças na linguagem.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Comportamentais
� Observer - Observador (Objeto) Define uma dependência 1-para-n entres objetos, de modo que quando o estado de um objeto é alterado todos seus dependentes são notificados e atualizados automaticamente.
� State - Estado (Objeto) Permite que um objeto altere seu comportamento quando seu estado interno se modifica. O objeto parecerá ter mudado de classe.
� Strategy - Estratégia (Objeto) Define uma família de algoritmos, encapsula cada um, e os faz inter-cambiáveis. Permite que o algoritmo varie independentemente dos clientes que o utilizam.
Iterator
Iterator
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Return new ConcreteIterator(this);
ClientAggregate
createIterator()
ConcreteAggregate
createIterator()
Padrão IteratorEstrutura e Participantes
Iterator
first()next()isDone()currentItem()
ConcreteIterator
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão IteratorConseqüências
� Suporte a variações na maneira de se atravessar um objeto agregado (pre-order, pós-ordem, em-ordem)
� Simplificação da interface do agregado� Mais de um cursor pendente sobre um agregado
Observer
Observer(s)
30%, 20%, 50%30%, 10%, 60%
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão ObserverEstrutura e Participantes
return subjectState
Subject
attach(Observer)
Observer
update()detach(Observer)notify() For all o in observers {
o.update();}
observerState = subject.getState();
ConcreteSubject
getState()
subjectState
ConcreteObserver
update()
observerState
subject
observers
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão Observer Conseqüências
�Variação independente de observáveis e observadores
�É fácil adicionar observadores sem modificar o observável ou os outros observadores
�Suporte a comunicação broadcast�Atualizações inesperadas (caso o processo
de notificação seja simplificado)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Criacionais
� AbstractFactory - Fábrica Abstrata� Builder - Construtor� FactoryMethod - Método Fabricante� Prototype - Protótipo� Singleton - Solitário
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrões Criacionais (1/2)
� AbstractFactory - Fábrica Abstrata (Object) Provê uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
� Builder - Construtor (Object) Separa construção da representação de um objeto complexo, de modo que o mesmo processo de construção possa criar diferentes representações.
� FactoryMethod - Método Fabricante (Class) Define uma interface para criação um objeto, mas deixa subclasses decidir quais classes instanciar. Permitindo a uma classe delegar instanciação a subclasses.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão AbstractFactory
�Meta�Provê uma interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas.
�Motivação�Muitas vezes um programa necessita criar famílias
inteiras de objetos que se relacionam apenas entre si�As diferentes famílias de objetos apresenta mesma
estrutura comum, mas não se relaciona com as outras famílias
�Exemplo: Suporte a múltiplos “look and feel” do pacote java.awt
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
AbstractFactoryParticipantes
� AbstractFactory�Declara uma interface para operações que criam objetos
(produtos) abstratos� ConcreteFactory
�Implementa a operações para criar objetos (produtos) concretos� AbstractProduct
�Declarea uma interface para um tipo de objeto (produto)� ConcreteProduct
�Define um objeto (produto) para ser criado pela ConcreteFactory correspondente
� Client�Usa apenas interfaces declaradas pela AbstractFactory e
AbstractProduct
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
AbstractFactoryColaborações
�Normalmente uma única instância de uma fábrica concreta é criada em run-time�Esta fábrica concreta cria objetos (produtos) com
uma implementação particular�Para criar produtos diferentes, clientes devem usar
fábricas concretas diferentes
�A AbstractFactory transfere a criação de objetos para as suas subclasses (ConcreteFactory)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
AbstractFactoryExercícios
Elabore um programa para exercitar a criação do padrão AbstractFactory
� O cliente é um Motorista. � Ele solicita à fábrica a “criação” de um automóvel que tem um motor e pneus.� O Cliente “entra” no automóvel, “liga” o motor, e eventualmente “fura” um pneu
� A Fábrica Abstrata cria Automóveis com Pneus e Motores� As Fábricas Concretas são VW e Ford, que criam automóveis Gol e
Ka, respectivamente. Os Pneus da VW são Goodyear, enquanto os Pneus da Ford são Firestone
� O Motor VW é AP, enquanto que a Ford usa CHT� Quando o Motorista “entra” no GOL ele faz um barulho “BRUM!”, Ka
faz um barulho “TREM!”.� O Motor AP faz um barulho “AP Ligado”, O Motor CHT faz um
barulho “CHT ligado”� Pneu Goodyear quando fura faz um barulho “Chash!”, Pneu
Firestone quando fura faz um barulho “TCHEEE!”.
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão Builder
� Intenção�Separar construção da implementação de um objeto complexo,
de modo que o mesmo processo de construção possa criar várias representações diferentes
� Motivação�Um programa muitas vezes necessita ler um formato de
documento (fonte) e convertê-lo em vários outros formatos diferentes (objeto).
�Se os formatos (objeto) não são definidos a priori, é possível configurar o programa com um conversor (builder) que pode ser especializado em diferentes formatos e operações de conversão
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão BuilderColaborações
aBuilder = new ConcreteBuilder()
aClient aBuilderaDirector
aDirector = new Director(aBuilder)
aDirector.construct()umBuilder.buildPartA()
umBuilder.buildPartB()
umBuilder.buildPartC()
aBuilder.getResult()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão BuilderExercícios
� Elabore um programa para exercitar a criação do padrão Builder� O AbstractBuilder é um Metalúrgico.
�Os ConcreteBuilder são de dois tipos MetalúrgicoBrasileiro e MetalúrgicoAlemão
�MetalúrgicoBrasileiro constrói um carro Gol com motor de aço e pneus de borracha natural.
�MetalúrgicoAlemão usa constrói um carro BMW com motor de alumínio e pneus de silicone.
� O Director é a fábrica, que receber um Builder qualquer (Mecânico) e deixa para o mecânico a tarefa de construir as partes do carro.
� A fábrica conecta as partes produzidas pelo mecânico.
JavaBeansJava Deployment Course: Aula 7
por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Java Beans
Objetivos desta Aula
�Apresentar os conceitos que suportam a construção de JavaBeans
�Reforçar conceitos do modelo de tratamento de eventos do AWT
�Criar e instalar no JBuilder um componente de software simples no formato de um JavaBean
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
O que é Java Beans?
�Um modelo de componente de software para Java�Descrição auto-contida�Reutilizável�Facilita programação visual�Pode ser inserido em um palete de
componentes⌧Consultas e configurações
�Rumo à construção e comercialização de software plug-and-play
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Para quê Servem JavaBeans?
�Blocos de componentes de GUI�Geradores de gráficos e relatórios�Planilhas�Instrumentos de aquisição e display de
dados �Calendários, Relógios, Agendas�Editores
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Principais Conceitos usados no Modelo Java Beans
� Eventos, Propriedades e Métodos�JavaBeans divulgam um conjunto bem definido de eventos que
produzem, e permitem que outros objetos registrem interesse na ocorrência destes eventos
�JavaBeans divulgam um conjunto bem definido de propriedades e métodos, permitindo que as propriedades sejam alteradas e os métodos sejam invocados
� Introspecção e Reflexão�Um JavaBean usa um padrão de codificação que permite que
uma ferramenta de edição visual interaja com o componente e deduza/altere suas características (eventos, propriedades e métodos) em build-time ou run-time
� Persistência e Empacotamento�Capacidade de armazenar, recuperar ou transmitir um
componente através de uma mídia digital (disco, conexão de rede, etc)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Propriedades
�Atributos ou características que são publicamente expostas pelo componente
�Padrões de Design para propriedades permitem�Descobrir que propriedades um JavaBean expõe�Determinar atributos de leitura e gravação da propriedade�Determinar o tipo da propriedade�Mostrar o nome e valor das propriedades (em um formulário);�Alterar o valor das propriedades (design-time)
�Categorias de Propriedades�Simples, Indexadas, Ligadas, Restritas
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Propriedades Simples
�Padrão de codificaçãopublic class MeuJavaBean {
private <PropertyType> <PropertyName> = <defaultValue>; ...public <PropertyType> get<PropertyName>();public void set<PropertyName>(< PropertyType> value);...
}
�Propriedades também podem ser computadas (em vez de armazenadas em variáveis)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Propriedades Indexadas
�Contem uma coleção de valores�Dois Padrões de Codificação
public class MeuJavaBean {public < PropertyType>[] get<PropertyName>();public void set<PropertyName>(< PropertyType>[] value);
}
public class MeuJavaBean {public < PropertyType> get<PropertyName>(int index);public void set<PropertyName>(int index, < PropertyType> value);
}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Propriedades Ligadas
�Usadas quando vários objetos precisam ser automaticamente notificados de mudanças no valor de uma propriedade
�Classes e interfaces envolvidas�PropertyChangeListener�PropertyChangeEvent�PropertyChangeSupport
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão de Codificação para Propriedades Ligadas
import java.beans.*;
class <BeanClassName> {private PropertyChangeSupport changes = new
PropertyChangeSupport(this);public void addPropertyChangeListener(PropertyChangeListener l) {
changes.addPropertyChangeListener(l);}public void removePropertyChangeListener(PropertyChangeListener l) {
changes.removePropertyChangeListener(l);}public void setLabel(String newLabel) {
String oldLabel = label;label = newLabel;changes.firePropertyChange("label", oldLabel, newLabel);
}}
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Propriedades Restritas
�Uma mudança no valor da propriedade pode ser vetada por um ou mais VetoableChangeListeners
�Classes envolvidas�VetoableChangeListener�PropertyChangeEvent�VetoableChangeSupport
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão de Codificação para Propriedades Restritas
class <BeanClassName> {private VetoableChangeSupport vetos = new VetoableChangeSupport(this);
public void addVetoableChangeListener(VetoableChangeListener l) {..}
public void removeVetoableChangeListener(VetoableChangeListener l) {..}
public void setPreco(int newPreco) throws PropertyVetoException {
int oldPreco = price;// Notifica os observadores sobre a proposta de mudança.vetos.fireVetoableChange("preco", ..oldPreco.., ..newPreco..);// Nenhum observador vetou a mudança. Prossegue com elaspreco = newPreco;changes.firePropertyChange("preco", ..oldPreco.., ..newPreco..));
}}
Tratamento de Eventos
TextField TextArea
CheckBox
Button
Canvas
Panel
Label
TextComponent
List
ScrollBar
Component
Window
Container
EventObject
AWTEvent
AdjustementEvent
ItemEventTextEvent
ActionEvent
ComponentEvent
FocusEvent PaintEvent
WindowEventContainerEvent
InputEvent
Frame Dialog
Choice
KeyEvent MouseEvent
Hierarquia de Componentes e Eventos do AWT
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Padrão de Codificação para Eventos
� Categorias de evento devem ser criadas (ou reutilizadas)class <EVENTNAME>Event extends EventObject
� Interfaces de consumidores evento devem ser criadas (ou reutilizadas)interface <EVENTNAME>EventListener extends EventListener {
public void <MÉTODONOTIFICADOR-1>(<EVENTNAME>Event event); public void <MÉTODONOTIFICADOR-2>(<EVENTNAME>Event event);
}
� Produtores de evento (JavaBeans) devem conter métodos para cadastrar consumidores de eventospublic void add<EVENTNAME>Listener(<EVENTNAME>Listener);
� Consumidores de evento (usários do JavaBean) devem implementar a interface adequadaclass <CONSUMIDORDEEVENTOS> implements <EVENTNAME>Listener
Interfaces e Classes para Observadores de Eventos do AWT
actionPerformed(ActionEvent)adjustementValueChanged(AdjustementEvent)
ComponentAdaper
ContainerAdapter
KeyAdapter FocusAdapter
WindowAdapter
MouseMotionAdapter
MouseAdapter
FocusListener MouseListener
ComponentListener
ContainerListener
ActionListener
AdjustementListener
KeyListener
WindowListener
MouseMotionListener
TextListener
ItemListener
EventListenercomponentHidden(ComponentEvent)componentMoved(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)itemStateChanged(ItemEvent)textValueChanged(TextEvent)windowActivated(WindowEvent)windowClosed(WindowEvent)windowClosing(WindowEvent)windowDeactivated(WindowEvent)windowDeiconified(WindowEvent)windowIconified(WindowEvent)windowOpened(WindowEvent)
mouseDragged(MouseEvent)mouseMoved(MouseEvent)
componentAdded(ContainerEvent)componentRemoved(ContainerEvent)
focusGained(FocusEvent)focusLost(FocusEvent)
mouseClicked(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mousePressed(MouseEvent)mouseReseased(MouseEvent)
keyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Introspecção
java.bean.Instrospector
MeuJavaBean
java.bean.BeanInfo
getBeanInfo()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Objeto java.bean.BeanInfo
Image getIcon(int iconKind)
MethodDescriptor[] getMethodDescriptors()
EventSetDescriptor[] getEventSetDescriptors()
BeanDescriptor getBeanDescriptor()
int getDefaultEventIndex()
PropertyDescriptor[] getPropertyDescriptors()
int getDefaultPropertyIndex()
BeanInfo[] getAdditionalBeanInfo()
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Reflexão (java.lang.reflect)
�Permite manipular classes, interfaces e objetos contidos na máquina virtual
�Usada na construção de depuradores, ferramentas de construção de GUI, browsers de classes
�Executar em run-time, várias operações que normalmente são programadas
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Possibilidades de Uso de Reflexão
� Determinar a classe de um objeto� Obter informação sobre modificadores da classe, seus métodos,
campos, construtores e superclasses� Observar quais constantes e métodos fazem parte de uma interface� Carregar uma classe na máquina virtual, cujo nome só é conhecido
em tempo de execução� Ler e modificar o valor do campo de um objeto, mesmo que o
nome do campo só seja conhecido em tempo de execução� Invocar um método de um objeto, mesmo que o método só tenha
sido conhecido em tempo de execução� Criar um novo array cujo tamanho e tipo dos componentes
so’sejam conhecidos em runtime, e modificar os componentes do array
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Outras Características de JavaBeans
�Editor de propriedades customizado�Java Activation Framework - JAF�Ajuste fino de serialização
�interface Externalizable
�Drag & Drop
Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.
Exercício
Conclusão da Primeira Etapa