Orientao a Objetos e Java Graduao em Cincia
Orientação a Objetos e Java Graduação em Ciência da Computação Alexandre Mota acm@cin. ufpe. br http: //www. 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)
Java. Beans 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.
Java. Beans Definição Oficial “Um bean é um componente de software reutilizável, baseado na especificação Java. Beans da Sun, que pode ser manipulado visualmente em uma ferramenta construtora”
Um Exemplo public class Image. Viewer. B extends JPanel implements Serializable { public void set. File. Name(String f) { file. Name = f; . . . } public String get. File. Name() { return file. Name; } public Dimension get. Preferred. Size() {. . . } Um bean é uma classe comum
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
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 – Active. X • 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 Consultar Limpar Mensagem do Painel. . . Pode ser reusado para construir várias telas. . .
Padrões para Propriedades public class Controle extends Panel. . . private Label label. Mensagem = new Label(); public void set. Mensagem(String new. Mensagem) { label. Mensagem. set. Text(new. Mensagem); } public String get. Mensagem() { return label. Mensagem. get. Text(); } Atributos gerais
Padrões para Propriedades private Button botao. Consultar = new Button(); public void set. Consultar. Habilitado(boolean b) { botao. Consultar. set. Enabled(b); } public boolean is. Consultar. Habilitado() { return botao. Consultar. is. Enabled(); } Atributos booleanos
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
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
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) – Bean. Info (maior controle sobre as informações)
Padrões para Introspecção public class Controle. Bean. Info extends Simple. Bean. Info { public Property. Descriptor[] get. Property. Descriptors() {. . . Property. Descriptor _consultar. Habilitado = new Property. Descriptor("consultar. Habilitado", bean. Class, "is. Consultar. Habilitado", "set. Consultar. Habilitado"); _consultar. Habilitado. set. Display. Name ("consultar. Habilitado"); _consultar. Habilitado. set. Short. Description ("Indica se o botão consultar está habilitado"); Property. Descriptor[] pds = new Property. Descriptor[] {_consultar. Habilitado, . . . } Simple. Bean. Info é uma implementação básica da interface Bean. Info
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 Inscrição para ouvir evento Chamada de método Objeto Bean Listener 1 Notificação de evento Listener 2 Listener 3
Padrões para Listeners public interface Controle. Listener extends Event. Listener { public void botao. Inserir. Pressionado (Botao. Pressionado. Event e); public void botao. Consultar. Pressionado (Botao. Pressionado. Event e); public void botao. Limpar. Pressionado (Botao. Pressionado. Event e); }
Padrões para Definição de Eventos public class Botao. Pressionado. Event extends Event. Object { public Botao. Pressionado. Event(Object source) { super(source); } }
Padrões para Inscrição e Remoção de Listeners public class Controle extends Panel. . . private transient Vector cont. Listeners; public synchronized void add. Controle. Listener(Controle. Listener l) { Vector v; if (cont. Listeners == null) v = new Vector(2); else v = (Vector) cont. Listeners. clone(); if (!v. contains(l)) { v. add. Element(l); cont. Listeners = v; } }
Padrões para Notificar Eventos void fire. Botao. Consultar. Pressionado (Botao. Pressionado. Event e) { if (cont. Listeners != null) { Vector listeners = cont. Listeners; int count = listeners. size(); for (int i = 0; i < count; i++) { Object o = listeners. element. At(i); Controle. Listener l; l = (Controle. Listener) o; l. botao. Consultar. Pressionado(e); } } Invocado pelo action. Performed do painel! }
Customização • As propriedades de um bean podem ser configuradas de forma mais amigável implementando tipos do pacote java. beans: – Property. Editor, 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
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 write. Object(Object. Output. Stream oos) throws IOException { oos. default. Write. Object(); } void read. Object(Object. Input. Stream ois) throws Class. Not. Found. Exception, IOException { ois. default. Read. Object(); }
Ferramentas para Beans Dentre outras, pode-se destacar: • Bean. Box (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é
Java. Beans 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/jdk 1. 2. 2/docs/api
- Slides: 28