28
Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota [email protected] http://www.cin.ufpe.br/ ~acm © Centro de Informática, UFPE

Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota [email protected] acm © Centro de Informática, UFPE

Embed Size (px)

Citation preview

Page 1: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Orientação a Objetos e JavaGraduação em Ciência da Computação

Alexandre [email protected]

http://www.cin.ufpe.br/~acm

© Centro de Informática, UFPE

Page 2: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Motivação

• Capacidade de criar componentes reutilizáveis, tais quais os da AWT e Swing do JBuilder

• Tecnologia deve permitir que o ambiente de programação visual consiga manipular características de tais componentes

• Múltiplas aplicações podem reusar tais componentes através de simples personalização (instanciação)

Page 3: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

JavaBeans

Objetivo

Ser capaz de desenvolver classes mais reusáveis, definindo-as como componentes de software que podem inclusive ser utilizados por ambientes de programação visual.

Page 4: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

JavaBeans

Definição Oficial

“Um bean é um componente de software reutilizável, baseado na especificação JavaBeans da Sun, que pode ser manipulado visualmente em uma ferramenta construtora”

Page 5: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Um Exemplopublic class ImageViewerB extends JPanel implements

Serializable{

public void setFileName(String f) { fileName = f; ... }

public String getFileName() { return fileName; }

public Dimension getPreferredSize() { ... }

...

} Um bean é uma classe comum

Page 6: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Características Visíveis

• Um bean, ao ser incorporado num ambiente de programação visual, vislumbra algumas características básicas:– Ícone– Breve descrição– Propriedades do bean– Eventos definidos

Page 7: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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:

– JavaBeans– ActiveX

• Ambientes de desenvolvimento visuais são baseados nestes padrões

Page 8: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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)

Page 9: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Características dos Componentes(JavaBeans)

• 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

Page 10: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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

Page 11: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Exemplo: Painel de Controle

Inserir LimparConsultar

Mensagem do Painel...

Pode ser reusado para construir várias telas...

Page 12: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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(); }

Atributos gerais

Page 13: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Padrões para Propriedades

private Button botaoConsultar = new Button();

public void setConsultarHabilitado(boolean b) { botaoConsultar.setEnabled(b);}

public boolean isConsultarHabilitado() { return botaoConsultar.isEnabled();}

Atributos booleanos

Page 14: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Padrões para Propriedades

• Notem que as padronizações de nomes foram usadas no curso e nos projetos

• Segue os mesmos princípios empregados na tecnologia de beans

• A principal vantagem é a determinação e manipulação automática dos métodos de uma classe

Page 15: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Tipos de Propriedades

• Simples: String, int, etc.• Ligadas: avisam a outros objetos que foram

modificadas (Listener)• Restringidas: modificações são

autorizadas/vetadas por outros objetos• Indexadas: arrays de objetos

Page 16: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Introspecção• Capacidade de oferecer informações sobre si

mesmo:– o bean tem métodos para informar sobre seus

próprios 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)

Page 17: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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, ...}

SimpleBeanInfo é uma implementação básica da interface BeanInfo

Page 18: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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

Page 19: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Usando os Serviços de um Bean

BeanChamada de método

Objeto

Listener1

Listener2Listener2

Listener3Listener3

Notificação de evento

Inscrição para ouvir evento

Page 20: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Padrões para Listeners

public interface ControleListener extends EventListener { public void botaoInserirPressionado (BotaoPressionadoEvent e); public void botaoConsultarPressionado (BotaoPressionadoEvent e); public void botaoLimparPressionado (BotaoPressionadoEvent e);}

Page 21: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Padrões para Definição de Eventos

public class BotaoPressionadoEvent extends EventObject {

public BotaoPressionadoEvent(Object source) { super(source); }}

Page 22: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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; } }

Page 23: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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!

Page 24: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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• Permite a edição de propriedades relacionadas

simultaneamente

Page 25: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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!

Page 26: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

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();}

Page 27: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

Ferramentas para Beans

Dentre outras, pode-se destacar:

• BeanBox (BDK – Bean Developer Kit): Não permite o desenvolvimento amigável (gráfico) em geral. É mais útil para usar e testar beans prontos (criados manualmente ou por outras ferramentas)

• JBuilder

• Visual Café

Page 28: Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin.ufpe.br acm © Centro de Informática, UFPE

JavaBeans

Referências•Capítulo 13 do livro Thinking in Java (de Bruce Eckel)•Capítulo 8 do livro Core Java, Vol. II (de Horstmann e Cornell)•Tutorial sobre Java Beans em http://www.cin.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.cin.ufpe.br/~java/docs/jdk1.2.2/docs/api