Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e...

Post on 28-Apr-2019

226 views 0 download

Transcript of Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e...

JavaTM Deployment CourseJava e Engenharia de Software Orientada a Objetos

por Jorge H C Fernandes(jhcf@di.ufpe.br)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(jhcf@di.ufpe.br)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 (jhcf@di.ufpe.br)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(jhcf@di.ufpe.br)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(jhcf@di.ufpe.br)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(jhcf@di.ufpe.br)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(jhcf@di.ufpe.br)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(jhcf@di.ufpe.br)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