Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
Orientação a Objetos e JavaGraduação em Ciência da Computação
Paulo Borba
http://www.di.ufpe.br/~phmb
© Centro de Informática, UFPE
Java Beans
Objetivo
Depois desta aula você será capaz de desenvolver classes mais reusáveis, definindo-as como componentes de software que podem inclusive ser utilizados para programação visual.
Java Beans
Leitura prévia essencial
• Capítulo 13 do livro Thinking in Java (de Bruce Eckel)
Componentes de Software
• Classes com características especiais para– facilitar reuso de software– possibilitar programação visual com ambientes
de desenvolvimento
• Padrões definem estas características: – Java Beans– ActiveX
• Ambientes de desenvolvimento visuais são baseados nestes padrões
Tipos de Componentes• Componentes visuais
– São representados graficamente – Classes para construção de interfaces gráficas:
botões, menus, rótulos, áreas de texto, etc.
• Componentes não-visuais– Não são representados graficamente– Classes para acesso a banco de dados, enviar
email, e para realizar qualquer outro serviço reusável (a classe Fachada, por exemplo)
Características dos Componentes(Java Beans)
• Além de atributos, métodos e construtores, os beans têm as seguintes características:– Propriedades – Introspecção– Comunicação por Eventos– Customização– Persistência
Propriedades
• “Atributos” que podem ser configurados para mudar a aparência ou o comportamento de um bean:– botão habilitado ou não, cor do botão, etc.– detalhes da conexão com um banco de dados,
nível de transação adotado pela conexão– mensagem de um painel de controle, habilitações
dos botões de um painel de controle
Exemplo: Painel de Controle
Inserir LimparConsultar
Mensagem do Painel...
Pode ser reusado para construir várias telas...
Padrões para Propriedades
public class Controle extends Panel ... private Label labelMensagem = new Label();
public void setMensagem(String newMensagem) {
labelMensagem.setText(newMensagem);
}
public String getMensagem() {
return labelMensagem.getText();
}
Métodos set e get
Padrões para Propriedades
private Button botaoConsultar = new Button();
public void setConsultarHabilitado(boolean b) { botaoConsultar.setEnabled(b);}
public boolean isConsultarHabilitado() { return botaoConsultar.isEnabled();}
Métodos set e is para booleanos
Tipos de Propriedades
• Simples, como as ilustradas
• Ligadas, que avisam a outros objetos que foram modificadas
• Restringidas, cujos modificações são autorizadas por outros objetos
• Indexadas, que descrevem valores múltiplos
Pequenas variações nos padrões apresentados
Introspecção
• Capacidade de oferecer informações sobre si mesmo:– O bean tem métodos para oferecer informações sobre seus
métodos, propriedades e eventos
• Utilizada pelos ambientes de programação visual
• Implementada através de tipos do pacote java.beans:– Introspector (informações geradas automaticamente)– BeanInfo (maior controle sobre as informações)
Padrões para Introspecçãopublic class ControleBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ... PropertyDescriptor _consultarHabilitado = new PropertyDescriptor("consultarHabilitado", beanClass, "isConsultarHabilitado", "setConsultarHabilitado"); _consultarHabilitado.setDisplayName ("consultarHabilitado"); _consultarHabilitado.setShortDescription ("Indica se o botão consultar está habilitado"); PropertyDescriptor[] pds = new PropertyDescriptor[] {_consultarHabilitado, ...}
Comunicação por Eventos
• Um modelo de comunicação entre objetos alternativo a chamada de métodos
• Assíncrono – publisher/subscriber– notifier/listener
• Multicast
• Construído usando o modelo de chamada de métodos
Usando os Serviços de um Bean
BeanChamada de método
Objeto
Listener1
Listener2Listener2
Listener3Listener3
Notificação de evento
Inscrição para ouvir evento
Padrões para Listeners
public interface ControleListener extends EventListener { public void botaoInserirPressionado (BotaoPressionadoEvent e); public void botaoConsultarPressionado (BotaoPressionadoEvent e); public void botaoLimparPressionado (BotaoPressionadoEvent e);}
Padrões para Definição de Eventos
public class BotaoPressionadoEvent extends EventObject {
public BotaoPressionadoEvent(Object source) { super(source); }}
Padrões para Inscrição e Remoção de Listeners
public class Controle extends Panel ... private transient Vector contListeners; public synchronized void addControleListener(ControleListener l) { Vector v; if (contListeners == null) v = new Vector(2); else v = (Vector) contListeners.clone(); if (!v.contains(l)) { v.addElement(l); contListeners = v; } }
Padrões para Notificar Eventos
void fireBotaoConsultarPressionado (BotaoPressionadoEvent e) { if (contListeners != null) { Vector listeners = contListeners; int count = listeners.size(); for (int i = 0; i < count; i++) { Object o = listeners.elementAt(i); ControleListener l; l = (ControleListener) o; l.botaoConsultarPressionado(e); } } } Invocado pelo actionPerformed do painel!
Customização
• As propriedades de um bean podem ser configuradas de forma mais amigável implementando tipos do pacote java.beans:– PropertyEditor, editor de propriedade especial
(configura uma propriedade)– Customizer, customizador de bean (configura as
propriedades de um bean)
• O ambiente de programação visual utiliza estes recursos, caso existam
Persistência
• As propriedades de um bean podem ser armazenadas de forma persistente
• Persistência default:
public class Controle extends Panel implements Serializable { ...}
Atributos qualificados como “transient” não são gravados!
Persistência
• Persistência específica, implementando Externalizable:void writeObject(ObjectOutputStream oos)
throws IOException {
oos.defaultWriteObject();
}
void readObject(ObjectInputStream ois)
throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
Java Beans
Resumo
• Componentes de software e o padrão Java Beans
• Propriedades: métodos set e get
• Introspecção: BeanInfo e Introspector
• Comunicação por eventos: EventListener e EventObject
• Customização: PropertyEditor e Customizer
• Persistência: Serializable e Externalizable
Java Beans
Leitura adicional
• Tutorial sobre Java Beans em http://www.di.ufpe.br/~java/docs/tutorial/javabeans/index.html
• Site de Java Beans em http://java.sun.com/beans
• Pacote java.beans da API de Java em http://www.di.ufpe.br/~java/docs/jdk1.2.2/docs/api