231
Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes ([email protected]) CESAR-DI-UFPE Recife, 1999

Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes ([email protected])

Embed Size (px)

Citation preview

Page 1: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

JavaTM Deployment CourseJava e Engenharia de Software Orientada a Objetos

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 2: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 3: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Meta

Page 4: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 5: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 6: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 7: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 8: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 9: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 10: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Vamos nos Conhecer?

�Alunos �Instrutor

Page 11: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

JavaTM e o Modelo de ObjetosJava Deployment Course: Aula 1

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 12: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 13: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 14: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 15: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 16: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 17: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 18: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 19: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 20: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 21: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 22: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 23: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 24: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Conceitos Básicos do Modelo de Objetos (1/2)

Page 25: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 26: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 27: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 28: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 29: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 30: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 31: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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=?

Page 32: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 33: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 34: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 35: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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() { ... }

}

Page 36: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 37: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}...

}

Page 38: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Exercício: Encontrando Classes e Objetos

Page 39: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 40: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 41: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 42: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 43: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 44: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 45: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 46: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 47: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Exercício: Classes e Relacionamentos de Herança

Page 48: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 49: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 50: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Ferramentas Convencionais

Page 51: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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”

Page 52: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 53: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 54: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 55: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Interfaces: Solucionando Problemas na Evolução de Código Polimórfico

O Kit de Soquetes Contra-Ataca

Page 56: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Novos Usos para o “Kit”: Apertando Parafusos

Page 57: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 58: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 59: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 60: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 61: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 62: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Exercício Simulado: Criação do Sistema de Controle Bancário

Page 63: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 64: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 65: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 66: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 67: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 68: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 69: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 70: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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() {..}

}

Page 71: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 72: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

JavaTM AppletsJava Deployment Course: Aula 2

por Jorge H. C. Fernandes ([email protected])CESAR-DI-UFPERecife, 1999

Page 73: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 74: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 75: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 76: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 77: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 78: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 79: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 80: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Applets Java

Page 81: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 82: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 83: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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>

Page 84: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Funcionamento dos AppletsWeb Server

WWW(HTTP)

Web Browser

Page 85: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Verificação do Bytecode

WWW(HTTP)

Web Browser

?

Page 86: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 87: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 88: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 89: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 90: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 91: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Exercício Simulado: Construção de um Applet

Page 92: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Programação Visual Java Deployment Course: Aula 3

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 93: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 94: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 95: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 96: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 97: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 98: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 99: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Elementos da Linguagem JavaTM

Java Deployment Course: Aula 4

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 100: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 101: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 102: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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++

Page 103: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 104: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

javaInterpretador Java

java

X.class

main(String[])

Page 105: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 106: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 107: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 108: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 109: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 110: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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"

Page 111: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 112: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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,

Page 113: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 114: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 115: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 116: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Palavras Reservadas da Linguagem Java

Page 117: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Tipos de Dados Primitivosboolean

voidchar

byte short int long

float double

Page 118: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Literais

null

true false

Page 119: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Pseudo Variáveis

super

this

Page 120: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Desvio e Controle de Fluxo

if

for do while

break continue return

switch case default

Page 121: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 122: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 123: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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>

}

Page 124: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Pacotes

package

import

Page 125: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 126: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Modificadores de Visibilidade

private

protected

public

Page 127: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Modificadores Gerais de Métodos e Variáveis

abstract

final

native

static

synchronized

transient

volatile

Page 128: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 129: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Declaração de Classes e Métodos

class

extends

implements

interface

Page 130: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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 { ...

}

Page 131: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 132: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Criação de Objetos

new

Page 133: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 134: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Teste de Compatibilidade de Tipos

instanceof

Page 135: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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+"]");

}}

}

Page 136: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Exceções

trycatchfinallythrowsthrow

Page 137: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 138: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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>

}

Page 139: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

. . .

}

Page 140: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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 {

...

}

Page 141: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 142: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

...

...

Page 143: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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>

}

Page 144: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 145: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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”);

}

}

}

}

Page 146: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 147: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 148: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 149: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 150: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 151: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 152: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 153: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Interface Gráfica em JavaAWT Versus SwingJava Deployment Course: Aula 5

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 154: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 155: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 156: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 157: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 158: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 159: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 160: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Observadores de Eventos

Page 161: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Swing(Fonte: Java Tutorial, 1999)

�Implementação completamente feita em Java

�Look & feel plugável�Accessibility�Java2D�Drag & Drop

Page 162: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 163: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 164: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Padrões de Design Orientado a Objetos: Design PatternsJava Deployment Course: Aula 6

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 165: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 166: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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/

Page 167: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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).

Page 168: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 169: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 170: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 171: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 172: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 173: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 174: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 175: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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%

Page 176: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 177: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 178: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 179: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 180: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 181: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 182: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 183: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 184: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 185: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 186: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 187: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 188: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 189: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 190: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 191: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 192: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 193: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Iterator

Iterator

Page 194: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 195: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 196: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Observer

Observer(s)

30%, 20%, 50%30%, 10%, 60%

Page 197: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 198: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 199: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 200: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 201: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 202: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 203: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 204: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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!”.

Page 205: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 206: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 207: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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.

Page 208: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

JavaBeansJava Deployment Course: Aula 7

por Jorge H C Fernandes([email protected])CESAR-DI-UFPERecife, 1999

Page 209: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 210: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 211: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 212: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 213: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 214: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 215: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}

Page 216: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 217: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

}}

Page 218: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 219: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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..));

}}

Page 220: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Tratamento de Eventos

Page 221: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 222: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 223: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Interfaces e Classes para Observadores de Eventos do AWT

Page 224: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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)

Page 225: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 226: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 227: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 228: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 229: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

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

Page 230: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Java Deployment Course. Copyright © 1999, 1998, 1997 by Jorge H. C. Fernandes. Todos os Direitos Reservados.

Exercício

Page 231: Java - cic.unb.brjhcf/MyBooks/itjava/slides/JavaDeployment... · Java TM Deployment Course Java e Engenharia de Software Orientada a Objetos por Jorge H C Fernandes (jhcf@di.ufpe.br)

Conclusão da Primeira Etapa