linguagem de programação java para iniciantes
TRANSCRIPT
![Page 1: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/1.jpg)
Linguagem de Programação
Java
![Page 2: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/2.jpg)
Linguagem de Programação Java
Agenda• Iniciando• Revisão de Conceitos• Arrays• Desenho Avançado de Classes• Manipulação de Erros e Exceções• Desenvolvimento de Aplicações• Construindo GUIS (Interfaces Gráficas com o
Usuário)• Tratamento de Eventos para GUIs• Programação para Redes• Programação Multi-Tarefa (Multi-Thread
Programming)
![Page 3: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/3.jpg)
Iniciando
![Page 4: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/4.jpg)
Iniciando
• Objetivos do módulo• Capacitar o aluno no desenvolvimento de aplicações
em Java usando as CORE APIs, bem como manipulação de arquivos, dados, interfaces gráficas e programação cliente-servidor.
• Habilidades adquiridas• Codificar, compilar e executar aplicações em Java
![Page 5: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/5.jpg)
Revisão de Conceitos
![Page 6: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/6.jpg)
Conceitos• Distribuições da Tecnologia Java• Tipos de Programas Java• “Key Features” da Tecnologia Java• Conceitos errados sobre Java• Palavras Reservadas• Entendendo a Portabilidade do Java• Entendendo a Java Runtime Enviromnent• Definição de Nomes• Anatomia de uma Classe Java• Aplicações Java Stand-Alone• Operadores• Controle de Fluxo• Criando Classes• Encapsulamento
Revisão de Conceitos
![Page 7: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/7.jpg)
Distribuições da Tecnologia Java
J2SE
Standard Edition
• Cliente/Servidor
• Applet
• Departamental
J2EE
Enterprise Edition
• eBusiness
• eCommerce
• Corporativo
J2ME
Micro Edition
• Telefone celular
• Dispositivos eletrônicos
• Móvel
Revisão de Conceitos
![Page 8: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/8.jpg)
Tipos de programas Java
• Stand-Alone
• Java Applets™
• Java Servlets™
• Java Midlets™
• JavaBeans™
Revisão de Conceitos
![Page 9: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/9.jpg)
“Key Features” da Tecnologia Java
• Simples• Orientada a objetos• Distribuída• Robusta• Segura• Neutra em relação à
Plataforma
• Portável• Interpretada• Alto desempenho• Múltiplas linhas de
execução• Dinâmica
Revisão de Conceitos
![Page 10: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/10.jpg)
Conceitos errados sobre Java
• Java é uma extensão do HTML• Java é apenas outra linguagem• Todos os programas Java executam em páginas Web• O Javascript é uma versão “Light” da linguagem Java• Java é interpretado, muito lento para aplicações sérias• Java é uma linguagem de programação fácil de
aprender• Java é um ambiente fácil no qual programar
Revisão de Conceitos
![Page 11: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/11.jpg)
Palavras Reservadas
abstract double int strictfp **
boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float package throw
char for private throws
class goto * protected transient
const * if public try
continue implements return void
default import short volatile
do instanceof static while
Revisão de Conceitos
![Page 12: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/12.jpg)
Entendendo a Plataforma Java
JVM
JRE
JDK
• JVM – Java Virtual MachineMáquina Virtual Java
• JRE – Java Runtime EnvironmnentAmbiente de execução de aplicativos Java
• JDK – Java Development KitAmbiente de desenvolvimento Java
Também chamado de J2SDK – Java 2 Software Development Kit
Revisão de Conceitos
![Page 13: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/13.jpg)
Entendendo a Java Runtime Enviromnent
Sistema Operacional
Java Virtual Machine
bytecode
Revisão de Conceitos
![Page 14: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/14.jpg)
Entendendo a Portabilidade do Java
Revisão de Conceitos
![Page 15: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/15.jpg)
Definição de Nomes
• Um nome pode ser composto por letras (minúsculas e/ou maiúsculas), dígitos e os símbolos _ e $.
• Um nome não pode ser iniciado por um dígito (0 a 9).
• Letras maiúsculas são diferenciadas de letras minúsculas. (Full Sensitive Case)
• Uma palavra-chave da linguagem Java não pode ser um identificador.
Revisão de Conceitos
![Page 16: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/16.jpg)
Anatomia de uma Classe Java
Revisão de Conceitos
![Page 17: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/17.jpg)
Aplicações Java Stand-Alone
public static void main(String args[]) {}
• Toda classe Java que possui o método acima, pode ser iniciada numa JRE exclusiva, no modo Stand-Alone
• Nem todas as classes Java necessitam ter esse método
Revisão de Conceitos
![Page 18: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/18.jpg)
OperadoresNegação !
Incremento / Decremento ++, --
Representação de sinal +, -
Inversão ~
Conversão (cast)
Atribuição =
Soma +
Subtração -
Divisão /
Multiplicação *
Resto da Divisão %
Incremento / Decremento ++, --
Representação de sinal +, -
Condicional ternário ?:
Revisão de Conceitos
![Page 19: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/19.jpg)
Operadores de bits
Deslocamento a esquerda <<
Deslocamento a direita >>
Deslocamento a direita (unsigned) >>>
Inversão de bits ~
Resto da Divisão %
Complemento (XOR) ^
Revisão de Conceitos
![Page 20: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/20.jpg)
Operadores de Comparação
Igualdade ==
Maioridade <
Menoridade >
Maior ou igual >=
Menor ou igual <=
Diferente !=
Revisão de Conceitos
![Page 21: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/21.jpg)
Estruturas de Repetição - FOR
sintaxe:
// antes de iniciar o laço, é executada a// declaração
for ( declaracao; condicao booleana; expressao ) {
// bloco de código que sera repetido// ate que a condição booleana seja false
// antes da execução iniciar o proximo laço// sera a executada a expressao
}
Revisão de Conceitos
![Page 22: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/22.jpg)
Estruturas de Repetição - WHILE
sintaxe:
while (condicao booleana) {
// bloco de código que sera repetido// ate que a condição booleana seja false
}
Revisão de Conceitos
![Page 23: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/23.jpg)
Estruturas de Repetição – DO WHILE-
sintaxe:
do {
// bloco de código que sera repetido// ate que a condição booleana seja false
} while ( condicao booleana );
Revisão de Conceitos
![Page 24: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/24.jpg)
Estruturas de Seleção - IF
sintaxe:
if ( expressão booleana ) {
// bloco de código que será executado// se a expressão booleana valer true.
} else {
// bloco de código que será executado// se a expressão booleana valer false.
}
Revisão de Conceitos
![Page 25: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/25.jpg)
Estruturas de Seleção - SWITCH
sintaxe:
switch ( variavel ) {case (inteiro):
// caso o valor da variavel seja igual// ao do inteiro, inicia aqui
case (inteiro):// caso o valor da variavel seja igual// ao do inteiro, inicia aqui
default:// caso não seja nenhum acima, inicia aqui
}
Revisão de Conceitos
![Page 26: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/26.jpg)
Controle de Fluxo
Uso do continue
for(int i = 0; i < 10; i++){
if (i == 5){continue;
}
//....
}
Revisão de Conceitos
![Page 27: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/27.jpg)
Controle de Fluxo
for(int i = 0; i < 10; i++){
if (i == 5){break;
}
//....
}
Revisão de Conceitos
Uso do break
![Page 28: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/28.jpg)
Controle de Fluxo Especiais
continue e break com label:
fora:for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
if (j == 5){continue fora;
}//....
}
Revisão de Conceitos
![Page 29: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/29.jpg)
Criando Classes em Java• O que é abstração?• O que são objetos?
• Do que eles são constituídos?• O que são classes?
• Do que elas são constituídas?• Qual a relação entre classe e objeto?• Quais são os membros de uma classe?
• Atributos, métodos e construtores!
Revisão de Conceitos
![Page 30: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/30.jpg)
Revisão de Conceitos
• Encapsulamento
pedido: Pedido
- pedidoID: String- clienteID: String- notaFiscal:String- total: double- ICMS: double- produtos: List
+ adcionarProduto(Produto)+ removerProduto(produtoID)+ recuperaProduto(produtoID)+ calculaTotal(): double+ calculaImpostos(): double+ encerraPedido(): double+ Pedido(pedidoID, clienteID)
Atributos privados
Métodos públicos
Definimos uma interface de métodos públicos fornecendo acesso a informação do objeto
![Page 31: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/31.jpg)
• Encapsulamento
Dessa forma, podemos alterar o código dos métodos da classe Pedido sem alterar a classe Cliente.
pedido: Pedido
- pedidoID: String- clienteID: String- notaFiscal:String- total: double- ICMS: double- produtos: List
+ adcionarProduto(Produto)+ removerProduto(produtoID)+ recuperaProduto(produtoID)+ calculaTotal(): double+ calculaImpostos(): double+ encerraPedido(): double+ Pedido(pedidoID, clienteID)
Atributos privados
Métodos públicos
Cliente
permitido
não permitido
Revisão de Conceitos
![Page 32: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/32.jpg)
Discussão
• O que se entende afinal pela Tecnologia e Plataformasdo Java?
• Sabendo que uma classe Java pode facilmente sermodelada, então é fácil analisa-la e codifica-la?
• Programar em Java, não é só codificar? Exige umentendimento prévio do problema?
Revisão de Conceitos
![Page 33: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/33.jpg)
Arrays
![Page 34: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/34.jpg)
Arrays
Agenda• Java Arrays• Definindo Arrays• Cópia elementos• Manipulando elementos
![Page 35: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/35.jpg)
Arrays
Java Arrays
• Manipulação de conjunto de dados em memória
• Possuem quantidade limitada de itens• Podem ser usados com objetos ou primitivos• Usamos para definir matrizes ou vetores
![Page 36: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/36.jpg)
Arrays
• Sintaxe
tipo identificador[] = new tipo[tamanho];
int[] inteiros = new int[10];
String[] nomes = new String[10];
• Exemplos
Java Arrays
![Page 37: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/37.jpg)
Arrays
int[] inteiros = new int[10];
• Visualização Gráfica
Java Arrays
![Page 38: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/38.jpg)
Java Arrays
• Podem ter “n” dimensões formando matrizes
int[][] dados = new int[10][10];
dados[0][0] = 100;
Arrays
![Page 39: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/39.jpg)
Definindo elementos
• Valores podem ser atribuídos na definição
int[] inteiros = {10,8,5,10,9};
• Tamanho pode ser obtido pela propriedade length
System.out.print(inteiros.length);
Arrays
![Page 40: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/40.jpg)
Copiando Elementos
int original[] = { 1, 2, 3, 4, 5, 6 };
int copia[] = new int[10];
System.arraycopy(original, 0, copia, 0, original.length);
Arrays
![Page 41: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/41.jpg)
Manipulando elementos
String nomes[] = new String[10];
// preenchendo
for (int i=0; i < nomes.length; i++) {
nomes[i] = new String("Valor: "+i);
}
// imprimindo na tela
for (int i=0; i < nomes.length; i++) {
System.out.print( nomes[i]+ " " );
}
Arrays
![Page 42: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/42.jpg)
Discussão
• Para que servem os Arrays nas linguagens deprogramação?
• Vetores e matrizes são elementos complexos demanipular, não existe nada mais fácil em Java para semanipular objetos?
• Quando um objeto tiver uma relação múltipla comoutro, vamos definir usando arrays?
Arrays
![Page 43: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/43.jpg)
Exercícios
Arrays
![Page 44: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/44.jpg)
Desenho Avançado de Classes
![Page 45: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/45.jpg)
Agenda• Herança• Generalização e Especialização• Representação UML• Objetos a partir de subclasses• Codificando em Java• Implementação das classes• Formas de Herança• Polimorfismo• Overloading• Overriding• Benefícios do Polimorfismo• Refinando a Hierarquia de Classes• Uso de Classes, Métodos e Variáveis Final• Uso de Classes e Métodos Abstratos• Uso de Interfaces• Pacotes
Desenho Avançado de Classes
![Page 46: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/46.jpg)
Herança
• ferramenta mais valiosa das linguagens e modelos baseados em OO;
• possibilita reutilizar uma grande quantidade de código e componentes.
• facilita a criação de classes partir de superclasses.
• Definição: “capacidade de um objeto filho herdar atributos e métodos do objeto pai, podendo reescrever (alterar) as características herdadas se necessário”.
Desenho Avançado de Classes
![Page 47: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/47.jpg)
Herança
A classe “cliente” é uma subclasse da classe “pessoa”, e herda todos os atributos e métodos da classe “pessoa”.
Cliente é uma subclasse de Pessoa.
Pessoa é uma superclasse de Cliente
Cliente
- clienteID: String- CPF: String
+ getClienteID(): String+ getCPF() : String+ Cliente(clienteID,CPF)
Pessoa
- nome: String- nascimento: Data
+ getNome(): String+ getDate() :Date+Pessoa(nome)
Construtores não são herdados
Desenho Avançado de Classes
![Page 48: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/48.jpg)
Generalização: Bottom-Up
• Definição: Processo pelo qual identificamos atributos comuns em classes diferentes que são colocados numa superclasse, menos específica e mais genérica.
Desenho Avançado de Classes
![Page 49: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/49.jpg)
Especialização: Top-Down
• Definição: Processo pelo qual identificamos atributos incomuns em classes diferentes que são colocados nas subclasses de uma superclasse, tornando-a mais específica e menos genérica .
Desenho Avançado de Classes
![Page 50: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/50.jpg)
Representação na UML
Define um modelo completo para solucionar um problema computacional.
Desenho Avançado de Classes
![Page 51: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/51.jpg)
Pessoa
- nome: String- nascimento: Data
+ getNome(): String+ getDate() :Date+Pessoa(nome) Joao:Pessoa
nome = Joao Souza
nascimento: 10/10/1980
Jose:Pessoa
nome = Jose Silva
nascimento: 10/01/1970
Instancias de Pessoa: Jose e Joao
Objetos a partir de subclasses
Desenho Avançado de Classes
![Page 52: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/52.jpg)
Cliente
- clienteID: String- CPF: String
+ getClienteID(): String+ getCPF() : String+ Cliente(clienteID,CPF)
Pessoa
- nome: String- nascimento: Data
+ getNome(): String+ getDate() :Date+Pessoa(nome)
Mario:Cliente
nome = Mario Silva Souza
nascimento: 01/05/1970
clienteID = 0056
CPF: 12345678-00
Oscar:Cliente
nome = Oscar Souza
nascimento: 02/02/1987
clienteID = 0058
CPF: 87654321-00
Instancias de Cliente: Mario e Oscar
Desenho Avançado de Classes
Objetos a partir de subclasses
![Page 53: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/53.jpg)
Desenho Avançado de Classes
Codificando em Java
public class Pessoa {// definição de classe
}
public class Cliente extends Pessoa {// definição de classe
}
• Uma subclasse pode estender somente uma superclasse diretamente. A herança em Java é simples.
• A keyword extends na definição de classe, define a relação de herança.
![Page 54: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/54.jpg)
Desenho Avançado de Classes
Implementação das Classes
public class Produto {// definição de classe
}
public class Livro extends Produto {// definição de classe
}
public class CompactDiscextends Produto {
// definição de classe}
![Page 55: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/55.jpg)
Desenho Avançado de Classes
Formas de Herança
• Extensão.
• Especificação.
• Combinação de Extensão com Especificação.
Durante a modelagem, devemos aplicar a herança com critério!
![Page 56: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/56.jpg)
Polimorfismo
• POLIMORFISMO = Muitas FormasOu seja, para uma árvore de herança, temos muitas
formas de objetos e métodos a partir de uma superclasse e suas subclasses.
• Princípio pelo qual modelamos e usamos objetos construídos a partir de uma arvore de herança.
Desenho Avançado de Classes
![Page 57: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/57.jpg)
Polimorfismo• Subclasses• Sobrescrita de método• Sobrecarga da método
Desenho Avançado de Classes
![Page 58: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/58.jpg)
Polimorfismo• Subclasses
• Quando especializamos uma superclasse e criamos um subclasse criamos um nova forma para a superclasse e conseqüentemente novas formas de objetos
Livro e CompactDisc são formas de Produto.
Desenho Avançado de Classes
![Page 59: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/59.jpg)
Overriding• Sobrescrita de métodos
Definição: Esta utilidade da orientação a objetos e das linguagens orientada a objetos nos permite escrever numa subclasse um ou mais métodos presentes numa das superclasses da árvore de herança podendo alterar o comportamento da superclasse
Desenho Avançado de Classes
![Page 60: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/60.jpg)
Overriding• Sobrescrita de métodos – Invocação Virtual de MétodosQuando for chamado para execução o método getDetalhes() da instancia de Pessoa, o código executado será: Pessoa.getDetalhes()
Quando for chamado para execução o método getDetalhes() da instancia de Cliente, o código executado será: Cliente.getDetalhes()
Ou seja, quando chamarmos um método de um objeto, o método escolhido para ser executado será a primeira ocorrência encontrada daquele método num arvore de herança (Invocação Virtual de Métodos).
Desenho Avançado de Classes
![Page 61: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/61.jpg)
Overloading• Sobrecarga de métodos
O Polimorfismo ainda permite que numa mesma classe tenhamos métodos com o mesmo nome, desde que o número ou tipos de parâmetros passados sejam diferentes
Desenho Avançado de Classes
![Page 62: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/62.jpg)
Benefícios do Polimorfismo• Uso da Herança
Cadastro
- pessoas: Lista
+ adcionaPessoa(Pessoa)+ removePessoa(indice) + listaPessoas(): Lista+ Cadastro()
Vendo estas classes de objetos podemos ver que o cadastro, pode cadastrar (ele entende) qualquer pessoa, inclusive os clientes, devido a herança.
Desenho Avançado de Classes
![Page 63: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/63.jpg)
Benefícios no Polimorfismo• Maior facilidade de alteração do modelo;• Maior facilidade de expansão de um modelo;• Melhor garantia de que uma idéia presente na
“Descrição do Problema” será mantida;
Desenho Avançado de Classes
![Page 64: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/64.jpg)
Revisão
Desenho Avançado de Classes
![Page 65: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/65.jpg)
Desenho Avançado de Classes
Refinando a Hierarquia de Classes
• Aplicação de Classes Final (Última forma);• Aplicação de Classes Abstratas;• Aplicação de Interfaces;
Processo pelo qual refinamos o modelo de classes com o objetivo de melhor definir a abrangência da solução referente ao problema de negócio.
![Page 66: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/66.jpg)
Desenho Avançado de Classes
Uso de Classes, Métodos ou Atributos Final (final)
Final Classes: Não podem ser especializadas, ou seja, é a última forma do objeto.
public final class ContaEspecialextends Conta {
...
}
![Page 67: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/67.jpg)
Desenho Avançado de Classes
Uso de Classes, Métodos ou Atributos Final (final)
Final Methods: Não podem ser especializados, ou seja, não podem ser reescritos na herança.
public class Poupanca extends Conta{...
public final void credito(double valor) {
}
}
![Page 68: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/68.jpg)
Desenho Avançado de Classes
Uso de Classes, Métodos ou Atributos Final (final)
Final Variables: Não podem ser alteradas depois de inicializadas, ou seja, tornam-se constantes.
public class Conta {...
public static final double CPMF = 0.0038;
}
As constantes geralmente são definidas como public static final, para que qualquer classe tenha acesso a esse valor!
![Page 69: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/69.jpg)
Uso de Classes e Métodos Abstratos (abstract)
Desenho Avançado de Classes
public abstract class Produto extends Object {
// metodo abstrato não possui corpo de implementacao.public abstract String getDescricaoCompleta();
}
Abstract Classes: Não podem ser instanciadas, ou seja, é a primeira forma do objeto, e devem ser especializadas.
![Page 70: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/70.jpg)
Desenho Avançado de Classes
public abstract classs Produto extends Object{...
public int getCodigo() {return codigo;
}
public double getPreco() {return preco;
}
public abstract String getDescricaoCompleta();
}
Uma classe abstrata, deve ter no mínimo um método abstrato.Uma classe abstrata, pode ter métodos concretos (não abstratos).Uma classe concreta, não pode ter métodos abstratos.
Uso de Classes e Métodos Abstratos (abstract)
![Page 71: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/71.jpg)
Desenho Avançado de Classes
Uso de Classes e Métodos Abstratos (abstract)
Nesse modelo, vemos que o Produto é um tipo abstrato manipulado pelo Catálogo!
Nesse caso, não podemos vender ou manipular um instância de Produto, somente de Livro ou CD.
![Page 72: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/72.jpg)
Uso de Interfaces (interface)
Desenho Avançado de Classes
Interfaces: Não podem ser instanciadas, e só possuem métodos abstratos ou constantes.
public interface identificador [extends OutraInterface] {
// os métodos de uma interface não possuem corpo,// somente definição.[modificador] tipoRetorno identificador ([argumentos]);
}
![Page 73: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/73.jpg)
Uso de Interfaces (interface)
Desenho Avançado de Classes
Usadas para definir apenas o nome de um comportamento, e não sua implementação!
Uma classe, abstrata ou concreta, pode estender somente uma classe, mas pode implementar múltiplas interfaces.
public interface Vendavel {
public double getValorVenda();
}
![Page 74: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/74.jpg)
Uso de Interfaces (interface)
Desenho Avançado de Classes
public class Livro extends Produtoimplements Vendavel {
...public double getValorVenda() {
return getPreco() * 1.2;}
}
public class CompactDisc extends Produtoimplements Vendavel {
...public double getValorVenda() {
return getPreco() * 1.1;}
}
Dessa forma, todas os objetos do modelo que quiserem ser vendavel, implementam a interface Vendavel, dando um comportamento para o método getValorVenda () de acordo com a necessidade de cada objeto.
![Page 75: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/75.jpg)
Uso de Interfaces (interface)
Desenho Avançado de Classes
Nesse modelo, vemos que o Vendavel é um tipo extremamente abstrato
Dessa forma, Livro e CD, são Produtos Vendaveis, com as características herdadas de produto, e uma implementação de Vendavel.
![Page 76: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/76.jpg)
Uso de Interfaces (interface)
Desenho Avançado de Classes
Dessa forma um carrinho de compras, manipula qualquer objeto Vendavel, inclusive Livro e CD.
Na evolução, esse sistema pode usar o Carrinho para qualquer Vendavel, não somente Produtos.
Enquanto o Catalogo manipula Produtos, o Carrinho manipula Vendaveis
![Page 77: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/77.jpg)
Uso de Interfaces (interface)
Desenho Avançado de Classes
public class Carrinho {
private Vendavel[] vendaveis;private int counter;
...
public int adcionaVendavel(Vendavel vendavel) {vendaveis[ counter++ ] = vendavel;return counter;
}
public Vendavel getVendavel(int index) {return vendaveis[ index ];
}
public double calculoCompras() {double valor = 0;for ( int i =0; i<vendaveis.length; i++ ) {
valor += vendaveis[i].getValorVenda();}return valor;
}}
![Page 78: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/78.jpg)
Organizando as Classes em Pacotes (package)
Desenho Avançado de Classes
Estrutura lógica, representada fisicamente em diretórios e subdiretórios usada com o intuito de organizar as classes de uma aplicação ou sistema.
Notação da UML
![Page 79: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/79.jpg)
Organizando as Classes em Pacotes (package)
Desenho Avançado de Classes
Exemplos do Banco e da Loja
Notação da UML
![Page 80: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/80.jpg)
Organizando as Classes em Pacotes (package)
Desenho Avançado de Classes
Codificação
Nas classes de um pacote colocamos a definição de package
package ibta.loja;
public class Carrinho {..}
package ibta.loja;
public class Catalogo {..}
Nas classes de outro pacote que necessitam usar as classes acima, usamos a definição de import
import ibta.loja.*;
public class TestaProdutos {..}
![Page 81: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/81.jpg)
Discussão• Resumindo. O que se entende por Herança?
• Quando devemos usar especialização e generalização?
• Sabemos que o polimorfismo nos fornece uma ferramentapoderosa na adição de tipos de objetos, então quer dizer que elenos permite ter sistemas mais flexíveis e que tem menos impactonas mudanças?
• Qual a necessidade de usar Classes Abstratas?
• Qual a maior diferença de Classes Abstratas e Interfaces?
• Porque usamos os pacotes?
Desenho Avançado de Classes
![Page 82: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/82.jpg)
Exercícios
Desenho Avançado de Classes
![Page 83: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/83.jpg)
Manipulando Erros e Exceções
![Page 84: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/84.jpg)
Agenda• O que são Erros e Exceções?• Hierarquia de Exceções• Exceções mais conhecidas• Capturando e tratando Exceções• Estrutura try-catch-finally• Usando o bloco try-catch• Criando Exceções Customizadas
Manipulando Erros e Exceções
![Page 85: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/85.jpg)
O que são erros e exceções?
Manipulando Erros e Exceções
São objetos e possuem classes para serem definidas.
Exceções estão associadas a condições não previstasdurante a execução de uma aplicação Java, e no caso deacontecerem, a execução pode continuar, exemplo, umaconversão numérica que falhou.
Tem o conceito de serem “arremessadas” ao chamador deum método, e são filhas da classe java.lang.Exception
![Page 86: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/86.jpg)
O que são erros e exceções?
Manipulando Erros e Exceções
São objetos e possuem classes para serem definidas.
Erros estão associados a condições não previstas durante aexecução de uma aplicação Java, e no caso deacontecerem, a execução não pode continuar, exemplo,falta de memória na JVM.
Tem o conceito de serem “arremessadas” ao chamador deum método, e são filhas da classe java.lang.Error
![Page 87: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/87.jpg)
Hierarquia da exceções
Manipulando Erros e Exceções
Todas as exceções e erros são subclasses de java.lang.Throwable
![Page 88: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/88.jpg)
Exceções mais conhecidas
Manipulando Erros e Exceções
• java.lang.ArithmeticException - erro de aritmética;
• java.lang.NumberFormatException – erro de formataçãonumérica;
• java.lang.ArrayIndexOutOfBoundsException – erro demanipulação de posições em arrays;
• java.lang.NullPointerException – erro ao chamar ummembro de objeto nulo;
• java.io.IOException – erro de entrada e saída;
• java.lang.ClassNotFoundException – erro de carga declasses;
![Page 89: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/89.jpg)
Exceções mais conhecidas
Manipulando Erros e Exceções
• java.lang.RuntimeException - erro não previsto naexecução;
As exceções filhas de RuntimeException não são obrigadas a serem tratadas, pois são consideradas“Unchecked Exceptions”
As exceções filhas de Exception que não são de RuntimeException são obrigadas a serem tratadas, pois são consideradas “Checked Exceptions”
Todos os Erros, filhos de Error, devem ser tratados apesarde não permitir que o programa continue.
![Page 90: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/90.jpg)
Capturando e tratando exceções
Manipulando Erros e Exceções
Usamos em Java uma estrutura em bloco para tratar execução de código que pode gerar uma exceção: é o bloco try – catch – finally.
![Page 91: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/91.jpg)
Estrutura try – catch - finally
Manipulando Erros e Exceções
try {// código que inclui comandos/invocações de métodos// que podem gerar uma situação de exceção.
} catch (Throwable t) {// bloco de tratamento associado à condição de// exceção derivada de Throwable ou a qualquer uma de suas// subclasses, identificada aqui pelo objeto// com referência t
} finally {// bloco de código que sempre será executado após// o bloco try, independentemente de sua conclusão// ter ocorrido normalmente ou ter sido interrompida// este bloco é opcional
}
![Page 92: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/92.jpg)
Estrutura try – catch - finally
Manipulando Erros e Exceções
try {a.method();b.method();c.method();
} catch (IOException t) {// A} catch (Exception t) {// B} catch (Throwable t) {// C} finally {
}
Se ocorrer uma IOException dentro do bloco try, será executado o bloco A.
Se ocorrer uma Exception que não é filha de IOException dentro do bloco try, será executado o bloco B.
Se ocorrer um Error dentro do bloco try, será executado o bloco C.
Independente do que aconteça o bloco finally será executado.
![Page 93: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/93.jpg)
Usando try – catch - finally
Manipulando Erros e Exceções
import java.io.*;
public class ConverteInteiro2 {public String leLinha() {
byte[] lidos = new byte[20];String texto = "";try {
// le o buffer do teclado e pode gerar uma IOExceptionSystem.in.read(lidos); texto = new String(lidos);texto = texto.trim(); // retira os espacos em branco
} catch (IOException ioException) {// se acontecer um erro na leitura// imprime na tela o erroioException.printStackTrace();
} return texto;
}public int leInt() {
String linha = leLinha();return Integer.parseInt(linha);
}
public static void main(String[] args) {ConverteInteiro2 ci = new ConverteInteiro2();System.out.print("Entre inteiro: ");int valor = ci.leInt();System.out.println("Valor lido foi: " + valor);
}}
![Page 94: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/94.jpg)
Criando exceções Customizadas
Manipulando Erros e Exceções
Geralmente em Java, quando queremos abortar a execução de um método, internamente fazemos um tratamento e geramos uma exceção ao invés de usar testes de retorno.
public class Conta {
public boolean debito(double valor) {if ( valor < 0 ) {
return false;} else {
if ( saldo - valor < 0 ) {return false;
} else {saldo -= valor;return true;
}}
}}
![Page 95: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/95.jpg)
Criando exceções Customizadas
Manipulando Erros e Exceções
Dessa forma criamos uma exceção customizada!
![Page 96: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/96.jpg)
Criando exceções Customizadas
Manipulando Erros e Exceções
Dessa forma criamos uma exceção customizada!
public class SaldoInsuficienteException
extends Exception {
public SaldoInsuficienteException () {
super("Falta de saldo para esta operação!");
}
public SaldoInsuficienteException (String mensagem) {
super(mensagem);
}
}
![Page 97: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/97.jpg)
Arremessando exceções Customizadas
Manipulando Erros e Exceções
Dessa forma criamos uma exceção customizada!
public class Conta2 {
private double saldo;
public void debito(double valor)
throws SaldoInsuficienteException {
if ( valor < 0 ) {
// unchecked exception não precisa ser declarada na clausula thorws
throw new IllegalArgumentException (“ Valor de debito deve ser maior que zero! ");
} else {
if ( saldo - valor < 0 ) {
// checked exceptio, deve ser declara na clausula throws
throw new SaldoInsuficienteException ("Saldo insuficiente! Atual: "+saldo);
} else {
saldo -= valor;
}
}
}
![Page 98: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/98.jpg)
Tratando exceções Customizadas
Manipulando Erros e Exceções
public class TesteConta2 {
public static void main(String args[]) {
Conta2 c2 = new Conta2();
try {
c2.credito(100);
System.out.println("Saldo: "+ c2.getSaldo() );
c2.debito(50);
System.out.println("Saldo: "+ c2.getSaldo() );
c2.debito(500);
System.out.println("Saldo: "+ c2.getSaldo() );
} catch (SaldoInsuficienteException e) {
// se acontecer uma SaldoInsuficienteException
// caira neste bloco
e.printStackTrace();
} catch (Exception e) {
// se acontecer qualquer outra Exception
// caira neste bloco
e.printStackTrace();
} finally {
System.out.println("Saldo: "+ c2.getSaldo() );
}
}
}
![Page 99: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/99.jpg)
Discussão
• Já que as exceções em Java são objetos, então temos classespara representá-las?
• Como identificar que um método lança uma exceção seuchamador?
• Devemos então sempre definir exceções customizadas paranossas aplicações?
• Qual a principal diferença entre CHECKED e UNCHECKEDExceptions?
Manipulando Erros e Exceções
![Page 100: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/100.jpg)
Exercícios
Manipulando Erros e Exceções
![Page 101: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/101.jpg)
Desenvolvimento de Aplicações em Java
![Page 102: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/102.jpg)
Agenda• Aplicações e Pacotes Java• Parâmetros em linha de comando• Manipulando texto e cadeia de caracteres• Entrada e saída de dados• Java Streamers• Java Readers e Writers• Arquivos de Acesso Randômico• Arquivos de Propriedades• Serialização de Objetos• Uso de Java Collectinons™• Wrapper Classes• Discussão• Exercícios
Desenvolvimento de Aplicações em Java
![Page 103: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/103.jpg)
A funcionalidades principais de uma linguagem inclui:• manipulação de textos;• manipulação de estruturas de dados;• parâmetros em linha de comando para inicializar aplicativos;• manipulação de arquivos de texto;• manipulação de arquivos randômicos;• manipulação de arquivos de configuração;• formatação de dados;
Essas funcionalidades vão nos permitir implementar uma boa parte das necessidades de qualquer tipo de sistema ou aplicação.
Desenvolvimento de Aplicações em Java
Aplicações e Pacotes
![Page 104: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/104.jpg)
Desenvolvimento de Aplicações em Java
Os principais pacotes que usaremos para escrever aplicações stand-alone utilitárias sem interfaces gráficas são:
• java.lang – fornece as classes fundamentais de linguagem java;• java.io – fornece classes para manipulação de arquivos;• java.util – fornece as estruturas de dados e classes utilitárias;• java.text – fornece as classes para formatação de dados;• java.math – fornece as classes para manipular números grandes;
Aplicações e Pacotes
![Page 105: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/105.jpg)
Desenvolvimento de Aplicações em Java
Usamos a passagem de dados como parâmetros em linhade comando com o intuito de passar valores a umaaplicação ou utilitário.
Esses valores podem ser:diretórios, nomes de arquivos, valores, etc.
Ex: # java ClasseMain –a nomearquivo.txt
Parâmetros em linha de comando
![Page 106: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/106.jpg)
Desenvolvimento de Aplicações em Java
Capturando os parâmetros dentro da aplicação Java:
public class TesteParametros {
public static void main(String args[]) {int tamanho = args.length;System.out.println("Numero de Parâmetros: "+tamanho);for(int i=0; i < tamanho; i++) {
System.out.println("Param: " + i + " Valor: "+ args[i] );}
}
}
Parâmetros em linha de comando
No método main, existe um array de String, args[], que representa os parâmetros passados.
# java TesteParametros parametro1 parametro2 “parametro 3”
![Page 107: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/107.jpg)
Desenvolvimento de Aplicações em Java
Manipulação de textos (cópia, pesquisa, conversões,maiúsculas e minúsculas, carateres, etc.)
Conjunto de método presentes nas classes:• java.lang.String – cadeia de caracteres• java.lang.StringBuffer – buffer de caracteres• java.lang.StringTokenizer – separador de textos
Manipulando textos e cadeia de caracteres
![Page 108: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/108.jpg)
Desenvolvimento de Aplicações em Java
Usos da Classe java.lang.Stringpublic class TesteString {
public static void main(String args[]) {String texto = "IBTA Java!";int tamanho = texto.length();System.out.println("Texto: "+texto);System.out.println("Tamanho: "+tamanho);String texto2 = texto.toUpperCase();System.out.println("Texto2: "+texto2);String texto3 = texto.toLowerCase();System.out.println("Texto3: "+texto3);String texto4 = texto3.replace( 'u', 'U' );texto4 = texto4.replace( 'j', 'J' );System.out.println("Texto4: "+texto4);if ( texto3.equals( texto ) ) {
System.out.println(" texto3 e texto são iguais! ");} else {
System.out.println(" texto3 e texto são diferentes! ");}if ( texto4.equals( texto ) ){
System.out.println(" texto4 e texto são iguais! ");} else {
System.out.println(" texto4 e texto são diferentes! ");}
}}
![Page 109: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/109.jpg)
Desenvolvimento de Aplicações em Java
Usos da classe StringBuffer e StringTokenizerimport java.util.StringTokenizer;
public class TesteStringBuffer {
public static void main(String args[]) {String texto = "IBTA Java! Java é aqui!";StringTokenizer tokenizer = new StringTokenizer( texto, "!");int numero = tokenizer.countTokens();String[] tokens = new String[ numero ];int count = 0;while ( tokenizer.hasMoreTokens() ) {
tokens[count] = tokenizer.nextToken();count++;
}System.out.println("Texto: "+texto);System.out.println("# Tokens: "+numero);System.out.print("Tokens: ");for ( int i = 0 ; i<tokens.length; i++) {
System.out.print( tokens[i] +",");}System.out.println();StringBuffer buffer = new StringBuffer( texto );StringBuffer invertido = buffer.reverse();System.out.println("Texto: "+texto);System.out.println("Invertido: "+invertido );
}}
![Page 110: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/110.jpg)
Desenvolvimento de Aplicações em Java
Entrada e saída de dados.
Basicamente um aplicativo lida com:• entrada de dados (via teclado, arquivos, mouse);• processamento (execução de tarefas nesses dados);• saída (via interface, arquivos e relatórios);
A entrada ou saída de dados usando teclado e arquivos,em Java é feito usando:
• Streamers• Readers• Writers
![Page 111: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/111.jpg)
Desenvolvimento de Aplicações em Java
Java Streamers
Usados para manipular byte (ASCII) de formaseqüencial (escrita ou leitura do arquivo todo).
Ligam uma fonte de dados (DataSource) até aoaplicativo (Program)
Geralmente usados para troca de dados entreaplicações Java e Non-Java.
![Page 112: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/112.jpg)
Desenvolvimento de Aplicações em Java
Java Streamers – java.io.InputStream
Streamers de entrada (do recurso para a aplicação)
![Page 113: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/113.jpg)
Desenvolvimento de Aplicações em Java
Java Streamers – java.io.OutputStream
Streamers de saída (da aplicação para o recurso)
![Page 114: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/114.jpg)
Desenvolvimento de Aplicações em Java
Readers e Writers
Usados para manipular char (UTF-16) de formaseqüencial (escrita ou leitura do arquivo todo).
Ligam uma fonte de dados (DataSource) até aoaplicativo (Program)
Geralmente usados para troca de dados entreaplicações Java e Java.
Padrão para as aplicações WEB.
![Page 115: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/115.jpg)
Desenvolvimento de Aplicações em Java
Readers – java.io.Reader
Readers (entrada de dados do recurso para a aplicação)
![Page 116: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/116.jpg)
Desenvolvimento de Aplicações em Java
Writers – java.io.Writer
Writers (saída de dados da aplicação para o recurso)
![Page 117: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/117.jpg)
Desenvolvimento de Aplicações em Java
Categorias e uso
![Page 118: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/118.jpg)
Desenvolvimento de Aplicações em Java
Categorias e uso
![Page 119: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/119.jpg)
Desenvolvimento de Aplicações em Java
Exemplosimport java.io.*;
public class Copy {
public static void main(String[] args) {try {
FileReader input = new FileReader(args[0]);FileWriter output = new FileWriter(args[1]);char[] buffer = new char[128];int charsRead = 0;charsRead = input.read(buffer);while ( charsRead != -1 ) {
output.write(buffer, 0, charsRead);charsRead = input.read(buffer);
}input.close();output.close();
} catch (IOException e) {e.printStackTrace();
}}
}
![Page 120: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/120.jpg)
Desenvolvimento de Aplicações em Java
Exemplosimport java.io.*;
public class LeTeclado {
public static void main (String args[]) {String s = null;InputStreamReader ir = new InputStreamReader(System.in);BufferedReader in = new BufferedReader(ir);System.out.println("Tecle Ctrl-Z para sair!");try {
s = in.readLine();while ( s != null ) {
System.out.println("Lido: " + s);s = in.readLine();
}in.close();
} catch (IOException e) {e.printStackTrace();
}}
}
![Page 121: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/121.jpg)
Desenvolvimento de Aplicações em Java
Exemplosimport java.io.*;
public class GravaArquivo {public static void main (String[] args) {
File file = new File(args[0]);try {
BufferedReader in = new BufferedReader( newInputStreamReader( System.in ));
PrintWriter out = new PrintWriter( newFileWriter(file));
String texto = null;System.out.print("Digite o texto! ");System.out.println("Ctrl+Z para gravar!");while ( (texto = in.readLine() ) != null ) {
out.println(texto );}in.close();out.close();
} catch (IOException e) {e.printStackTrace();
}}
}
![Page 122: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/122.jpg)
Desenvolvimento de Aplicações em Java
Arquivos de Acesso Randômico
Usados para manipular arquivos de dados que de formarandômica (escrita em leitura em qualquer parte doarquivo).
Ligam uma fonte de dados (DataSource) até ao aplicativo(Program)
Geralmente usados para troca de dados entre aplicaçõesJava e Non-Java.
Permite a implementação em Java do conceito deRegistro.
![Page 123: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/123.jpg)
Desenvolvimento de Aplicações em Java
Arquivos de Acesso Randômico
Classe: java.io.RandomAccessFile
O arquivo pode ser aberto num modo (Read, Write ou ReadWrite)
Cada REGISTRO, tem um inicio e fim, com tamanho definido.
A classe fornece principalmente métodos para:lock (bloqueio), seek (pesquisa), read (leitura) e write (gravação).
![Page 124: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/124.jpg)
Desenvolvimento de Aplicações em Java
Trabalho com Propriedades (Properties)
Uma propriedade (property) é um elemento da aplicação que pode ser alterado em tempo de execução.
Sua existência permite a configuração do aplicativo (ex: diretorio de dados, nomes de arquivos, dicionários, etc), e essa configuração fica armazenada em arquivo.
Ainda podemos identificar elementos da JRE e do sistema corrente (Windows, UNIX, etc)
Classe: java.util.Properties
![Page 125: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/125.jpg)
Desenvolvimento de Aplicações em Java
Trabalho com Propriedades (Properties)
Listando as propriedades do sistemaimport java.util.*;
public class TestePropriedades {
public static void main(String args[]) {Properties props = System.getProperties();Enumeration prop_names = props.propertyNames();while ( prop_names.hasMoreElements() ) {String prop_name = (String) prop_names.nextElement();String property = props.getProperty(prop_name);System.out.println("property ’" + prop_name + "’ is ’" +
property + "’");}
}}
![Page 126: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/126.jpg)
Desenvolvimento de Aplicações em Java
Trabalho com Arquivos de Propriedades
Permite criar e manipular arquivos de configuração ou de outra necessidade para as aplicações:
#nomes.properties#tipo=papelusuario=useradministrador=adminconvidado=guest
#aplicacao.ini#arquivo de configuraçãodiretorioTemp=c:/tempdiretorioApp=d:/appl
Arquivos de texto simples, onde do lado esquerdo do igual temos a propriedade e do lado direito seu valor.
![Page 127: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/127.jpg)
Desenvolvimento de Aplicações em Java
Trabalho com Arquivos de Propriedades
Lendo um arquivo de propriedades// class CarregaPropriedades.javaimport java.io.*;import java.util.*;
public class CarregaPropriedades {private Properties props;
public CarregaPropriedades(String nomeArquivo) {try {
FileInputStream fis = new FileInputStream( nomeArquivo );
props = new Properties();props.load( fis );
} catch (Exception e) {e.printStackTrace();
}}
public String getProperty(String nome) {return (String) props.get( nome );
}
}
![Page 128: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/128.jpg)
Desenvolvimento de Aplicações em Java
Trabalho com Arquivos de Propriedades
Obtendo as propriedades lidas:
// class TesteCarregaPropriedades.javapublic class TesteCarregaPropriedades {
public static void main(String args[]) {CarregaPropriedades carregador = null;if ( args.length == 1 ) {
carregador = new CarregaPropriedades ( args[0] );
System.out.println("usuario="+ carregador.getProperty("usuario") );
System.out.println("convidado="+ carregador.getProperty("convidado") );
System.out.println("administrador="+ carregador.getProperty("administrador") );
} else {System.out.println("Uso: java
TesteCarregaPropriedades arquivo.properties ");}
}}
![Page 129: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/129.jpg)
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Mecanismo exclusivo da tecnologia Java e usado para:
• Armazenar objetos em disco (manter o estado);• Transmitir dados de objetos pela rede (comunicação);• Permitir armazenar o estado das GUIs (J2SE e J2ME);• Permitir a redundância em aplicações J2EE;• Permitir armazenar dados em JavaCards™ (J2ME);• Etc.
![Page 130: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/130.jpg)
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Quando armazenamos um objeto (serializamos), estamos gravando num Stream o estado como ele se encontra (gravar atributos da memória no recurso)
Quando lemos um objeto (deserializamos), estamos lendo de um Stream o objeto no estado como ele se encontrava (ler atributos do recurso para a memória)
![Page 131: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/131.jpg)
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Para serializar um objeto, sua classe deve implementar a interface java.io.Serializable
// Pessoa.javapublic class Pessoa implements java.io.Serializable {
private String nome;private java.util.Date nascimento;
public java.util.Date getNascimento() {return nascimento;
}
public String getNome() {return nome;
}
public void setNascimento(java.util.Date nascimento) {
this.nascimento = nascimento;}
public void setNome(String nome) {this.nome = nome;
}}
![Page 132: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/132.jpg)
Desenvolvimento de Aplicações em Java
Exemplos de Serialização de Objetos// SerializadorPessoa.javaimport java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;
public class SerializadorPessoa {
public void gravaPessoa(String nomeArquivo, Pessoa pessoa) throws IOException {if ( pessoa != null && nomeArquivo != null ) {
FileOutputStream fos = new FileOutputStream( nomeArquivo );ObjectOutputStream oos = new ObjectOutputStream ( fos );oos.writeObject( pessoa );oos.close();
}}
public Pessoa recuperaPessoa(String nomeArquivo)throws IOException, ClassNotFoundException {Pessoa pessoa = null;if ( nomeArquivo != null ){
FileInputStream fis = new FileInputStream( nomeArquivo );ObjectInputStream ois = new ObjectInputStream( fis );pessoa = (Pessoa) ois.readObject();ois.close();
}return pessoa;
}}
![Page 133: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/133.jpg)
Desenvolvimento de Aplicações em Java
Exemplos de Serialização de Objetos
// classe TesteSerializadorPessoa.javapublic class TesteSerializadorPessoa {
public static void main(String args[]) {Pessoa pessoa = new Pessoa();pessoa.setNome("Oziel Moreira Neto");pessoa.setNascimento( new java.util.Date(75,9,23) );try {
SerializadorPessoa serializador = new SerializadorPessoa();serializador.gravaPessoa("oziel.obj", pessoa);pessoa = null;pessoa = serializador.recuperaPessoa("oziel.obj");System.out.println( pessoa.getNome() );System.out.println( pessoa.getNascimento() );
} catch (Exception e) {e.printStackTrace();
}}
}
![Page 134: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/134.jpg)
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Quando serializamos um objeto, estamos armazenando seus atributos de uma forma que o Java entende!
![Page 135: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/135.jpg)
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Trabalhar mais facilmente com multiplicidade de objetos sem os problemas dos arrays de dimensionamento, pesquisa, etc.
Usamos uma Collection para:• suportar relacionamentos múltiplos entre objetos;• substituir o uso e manipulação de arrays;• trabalhar com estruturas de dados em memória para ordenação;
![Page 136: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/136.jpg)
Desenvolvimento de Aplicações em Java
As Java Collections ™ fornecem uma interface de métodos simples que manipulam qualquer objeto Java, pois seus métodos manipulam referâncias da java.lang.Object.
As classes concretas da API de collection são divididas de acordo com sua categoria de superclasse, e quando uma subclasse implementa uma das interfaces abaixo temos:
• java.util.List – lista de objetos não ordenados, que permite duplicados;• java.util.Set – conjunto de objetos não ordenados, que não permite duplicados;•java.util.Map – estrutura em memória que armazena os objetos de acordo com uma chave;
Coleções de Objetos – Java Collections™
![Page 137: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/137.jpg)
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Como este framework é muito extenso, vamos estudar as três principais estruturas de manipulação de coleções de objetos:
• java.util.ArrayList;• java.util.HashMap• java.util.HashSet.
Para o perfeito funcionamento das Collections, éimprescindível que o os nossos objetos reescrevam osseguintes métodos da java.lang.Object:
• public boolean equals(Object obj);• public int hashCode();
![Page 138: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/138.jpg)
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Alterando a classe Pessoapublic class Pessoa implements java.io.Serializable {
private String nome;private java.util.Date nascimento;
...
public boolean equals(Object obj) {boolean flag = false;if ( obj instanceof Pessoa ) {
Pessoa that = (Pessoa) obj;flag = that.nome.equals( this.nome ) &&
that.nascimento.equals( this.nascimento );}return flag;
}
public int hashCode() {return ( nome != null && nascimento != null) ?
nome.hashCode() ^ nascimento.hahsCode() : 0;}
}
![Page 139: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/139.jpg)
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Testando as Collections com o objeto Pessoa:• Explicar o ListaPessoas e executar o TesteListaPessoas;• Explicar o MapaPessoas e executar o TesteMapaPessoas;• Explicar o ConjuntoPessoas e executar o TesteConjuntoPessoas;
O que foi percebido?
![Page 140: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/140.jpg)
Desenvolvimento de Aplicações em Java
Wrapper Classes
Finalidade de converter:• os tipos primitivos em tipos de referência;• Strings (cadeias de números) em tipos primitivos;
![Page 141: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/141.jpg)
Desenvolvimento de Aplicações em Java
Wrapper Classes
Exemplos:
// convertendo um primitivo para String
int numero = 10;
Integer wrapperNumero = new Integer( numero );
String strNumero = wrapperNumero.toString();
// convertendo uma String para primitivo
String strNumero = “10”;
Integer wrapperNumero = new Integer( strNumero );
int numero = wrapperNumero.intValue();
![Page 142: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/142.jpg)
Discussão
• Vimos nesse capítulo uma série de conceitos que são usados emaplicações de fato, ou seja, arquivos de configurações(properties), coleções de objetos, manipulação de arquivos textoe de arquivos de dados (Randômico).
• Necessariamente todas as aplicações usam esses recursos?
• Quais dos recursos nesse capítulo são mais fáceis de seimplementar?
• Podemos usar a serialização de objetos para armazenar nossosobjetos temporariamente e indefinidamente?
Desenvolvimento de Aplicações em Java
![Page 143: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/143.jpg)
Exercícios
Desenvolvimento de Aplicações em Java
![Page 144: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/144.jpg)
Construindo GUIs (Interfaces Gráficas com o Usuário)
![Page 145: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/145.jpg)
Agenda• Exemplos de GUIs• Introdução as JFCs• Entendendo a Hierarquia de Classes• Modelo de Desenvolvimento de GUIs• Modelo de Desenvolvimento usando SWING• Gerenciadores de Layout e Posicionamento• Manipulando Aspectos Visuais• Tipos de Componentes Visuais• Criando Menus para o Usuário• Trabalhando com Caixas , Botões e Campos• Trabalhando com Listas, Combos e Tabelas• Discussão• Exercícios
Construindo GUIs
![Page 146: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/146.jpg)
Exemplos de GUIs
Construindo GUIs
![Page 147: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/147.jpg)
Java Foundation Classes
• Desenvolvimento de aplicações Stand-Alone ou Applets• Riqueza visual e iteratividade• Desenhos 2D• Acessibilidade• Drag and Drop
Introdução as JFC
Construindo GUIs
![Page 148: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/148.jpg)
Java Foundation Classes
• AWT – java.awt, java.awt.event• Accessibility – javax.accessibility• Java 2D – java.awt, java.awt.geom, java.awt.image• DnD – java.awt.dnd• SWING – javax.swing, javax.swing.event
Introdução as JFC
Construindo GUIs
Estes são os pacotes principais, dentro de cada um delesexistem classes específicas para determinadasnecessidades.
![Page 149: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/149.jpg)
Entendendo a Hierarquia de Classes
Construindo GUIs
A classe principal do SWING é a JComponent, e a partir dela temos as abstrações para construirmos uma GUI.
Top-Level Containers(Components) são aqueles que devem conter os outros tipos de componentes para uma GUI pode ser exibida.
![Page 150: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/150.jpg)
“Containers” e “Components”
• Vendo a hierarquia de classes, um Container (Top-Level Component) pode conter Components, e usamosum Container para exibir todos os outros Components.
• Components são todos aqueles que usamos paradesenhar a GUI
• Top-Level Components, usamos para exibir uma GUI(JFrame, JApplet, JWindow, JDialog)
Modelo de Desenvolvimento de GUIs
Construindo GUIs
![Page 151: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/151.jpg)
Especialização
• Geralmente para criamos nossa “Tela-Principal” de umaaplicação, criamos uma nova classe especializando aclasse javax.swing.JFrame.
Modelo de Desenvolvimento usando SWING
Construindo GUIs
import javax.swing.*;
public class MyFrame extends JFrame {
...
}
![Page 152: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/152.jpg)
Especialização
• Geralmente para criamos formulários completos quepode ser reutilizados, especializados a classejavax.swing.JPanel.
Modelo de Desenvolvimento usando SWING
Construindo GUIs
import javax.swing.*;
public class MyPanel extends JPanel {
...
}
![Page 153: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/153.jpg)
Composição
• Para criamos formulários (telas) das nossas aplicaçõesque podem ser reutilizadas em qualquer aplicaçãoSWING faremos composição de outros componentes.
Modelo de Desenvolvimento usando SWING
Construindo GUIs
import javax.swing.*;
private JTextField txtNome, txtEndereco;
public class MyPanel extends JPanel {
...
}
![Page 154: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/154.jpg)
Funcionar em qualquer plataforma e modo deexibição:
• Facilita a codificação• Comportamento garantido (Windows, MAC, Linux, Unix)• 100% Java• Não são necessários cálculos de tamanho e posição
quando redimensionamos os componentes
Gerenciadores de Layout e Posicionamento
Construindo GUIs
Assim necessitamos de um Gerenciador de Layout, veja ainterface: java.awt.LayoutManager
![Page 155: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/155.jpg)
Podemos aplicar um Layout Manager num:
• Top-Level Component (JFrame, JWindow, JDialog,JApplet)
• Container (JPanel, etc)• Usamos o metodó setLayout( layoutManger )
Gerenciadores de Layout e Posicionamento
Construindo GUIs
Dessa forma, não é necessário tratar posição e tamanhodos componentes no nosso código, devemos apenasrespeitar as regrar do Gerenciador de Layout
![Page 156: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/156.jpg)
Tipos de Gerenciadores (Layout Managers)
• FlowLayout• BorderLayout• GridLayout• GridBagLayout• Layout Compostos
Gerenciadores de Layout e Posicionamento
Construindo GUIs
![Page 157: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/157.jpg)
FlowLayout
• Alinhamento padrão ao centro e acima, tentandoarranjar os componentes numa única linha
• Mantém o preferedSize dos componentes (tamanhoinicial dos componentes)
• O container pode receber mais de um componentenuma área
• Usado quase sempre!
Gerenciadores de Layout e Posicionamento
Construindo GUIs
![Page 158: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/158.jpg)
FlowLayout
Gerenciadores de Layout e Posicionamento
Construindo GUIs
import java.awt.FlowLayout;
import javax.swing.*;
public class FlowExample extends JFrame {
public FlowExample() {
super("FlowExample");
...
getContentPane().setLayout( new FlowLayout() );
}
public void init() {
..
setVisible( true );
}
public static void main(String args[]) {
new FlowExample().init();
}
}
![Page 159: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/159.jpg)
GridLayout
• Divide um Container em partes iguais, no formato deum GRID (Tabela)
• NÃO mantém o preferedSize dos componentes(tamanho inicial dos componentes)
• O container só recebe um componente por área ecomponente tende a ocupar toda a área
Gerenciadores de Layout e Posicionamento
Construindo GUIs
![Page 160: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/160.jpg)
GridLayout
Gerenciadores de Layout e Posicionamento
Construindo GUIs
import java.awt.*;
import javax.swing.*;
public class GridExample extends JFrame {
public FlowExample() {
super(“GridExample");
...
getContentPane().setLayout( new GridLayout(2,2) );
}
public void init() {
..
setVisible( true );
}
public static void main(String args[]) {
new GridExample().init();
}
}
![Page 161: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/161.jpg)
BorderLayout
• Divide um Container em cinco áreas (North, South,East, West e Center)
• NÃO mantém o preferedSize dos componentes(tamanho inicial dos componentes)
• O container só recebe um componente por área ecomponente tende a ocupar toda a área
Gerenciadores de Layout e Posicionamento
Construindo GUIs
![Page 162: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/162.jpg)
BorderLayout
Gerenciadores de Layout e Posicionamento
Construindo GUIs
import java.awt.*;
import javax.swing.*;
public class BorderExample extends JFrame {
public BorderExample() {
super(“BorderExample");
...
getContentPane().setLayout( new BorderLayout() );
}
public void init() {
..
setVisible( true );
}
public static void main(String args[]) {
new BorderLayout().init();
}
}
![Page 163: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/163.jpg)
GridBagLayout
• Divide um Container em um GRID (Tabela)extremamente flexível e customizável.
• NÃO mantém o preferedSize dos componentes(tamanho inicial dos componentes)
• O container só recebe um componente por área ecomponente tende a ocupar toda a área
• Necessário definir um objeto GridBagConstraints paracada Component
Gerenciadores de Layout e Posicionamento
Construindo GUIs
![Page 164: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/164.jpg)
GridBagLayout
Gerenciadores de Layout e Posicionamento
Construindo GUIs
import java.awt.*;
import javax.swing.*;
public class GridBagExample extends JFrame {
public FlowExample() {
super(“GridExample");
...
getContentPane().setLayout( new GridBagLayout() );
}
public void init() {
..
setVisible( true );
}
public static void main(String args[]) {
new GridBagExample().init();
}
}
![Page 165: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/165.jpg)
Layouts Compostos
• Criamos vários conteiners e cada um deles com umlayout manager diferente.
• Dividimos uma GUI em pedaços e trabalhos comComposição de elementos
Gerenciadores de Layout e Posicionamento
Construindo GUIs
![Page 166: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/166.jpg)
Layouts Compostos
Gerenciadores de Layout e Posicionamento
Construindo GUIs
JFrame do tipo BorderLayout,
JPanel com Botões na parte NORTH,
JPanel com Mensagem na parte SOUTH,
JTextArea na parte CENTER
![Page 167: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/167.jpg)
Podemos mudar Cursores, Fontes, Cores, Bordas eDicas• Cursor – setCursor ( java.awt.Cursor );
• Fonte – setFont( java.awt.Font );
• Cor de Frente – setForeground( java.awt.Color );
• Cor de Fundo – setBackground ( java.awt.Color );
• Dica – setToolTipText( java.lang.String );
• Borda – setBorder( javax.swing.border.Border );
• Exibição – setEnabled ( boolean );
Manipulando Aspectos Visuais
Construindo GUIs
![Page 168: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/168.jpg)
Um tipo de componente para cada necessidade• Janela – JFrame, JWindow, JDialog
• Botão – JButton, JToogleButton, JRadioButton,JCheckBox
• Texto – JTextField, JTextArea, JFormattedField,JPasswordField
• Combo – JComboBox, DefaultComboModel
• Listas – JList, DefaultListModel
• Tabela – JTable, DefaultTableModel
• Menu – JMenu, JMenuItem, JMenuBar
• Diálogo – JOptionPane
Tipos de Componentes Visuais
Construindo GUIs
![Page 169: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/169.jpg)
Para facilitar a navegação entre telas de uma GUI
• Criamos os itens de menu usando JMenuItem
• Criamos os menus usando JMenu
• Montamos o menu usando JMenuBar
• Num JFrame usamos o métodosetJMenuBar( umMenuaBar )
Criando Menus para o Usuário
Construindo GUIs
![Page 170: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/170.jpg)
Criando Menus para o Usuário
Construindo GUIs
// construindo objetosabrir = new JMenuItem("Abrir");novo = new JMenuItem("Novo");salvar = new JMenuItem("Salvar");sair = new JMenuItem("Sair");copiar = new JMenuItem("Copiar");colar = new JMenuItem("Colar");recortar = new JMenuItem("Recortar");ajuda = new JMenuItem("Ajuda");info = new JMenuItem("Info");arquivo = new JMenu("Arquivo");editar = new JMenu("Editar");sobre = new JMenu("Sobre");// construindo menu arquivoarquivo.add ( abrir );arquivo.add ( novo );arquivo.add ( salvar );arquivo.addSeparator();arquivo.add ( sair );// construindo menu editareditar.add ( copiar );editar.add ( colar );editar.add ( recortar );// construindo menu sobresobre.add ( ajuda );sobre.add ( info );// construindo menumenuBar = new JMenuBar();menuBar.add( arquivo );menuBar.add( editar );menuBar.add( sobre );setJMenuBar( menuBar );
![Page 171: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/171.jpg)
Caixa de Diálogo - JOptionPane
• Usado para exibir informações ou opções para ousuário.
Trabalhando com Caixas, Botões e Campos
Construindo GUIs
![Page 172: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/172.jpg)
Botões
• JButton – botão simples para uma ação.• JRadioButton e ButtonGroup – usamos para opções
únicas e exclusivas como escolher sexo, estado civil,etc.
• JCheckBox – opções múltiplas e não exclusivas comomarcar bens, carro, moto, casa, etc.
• JToggleButton – usamos quando um valor está ativo oudesativo.
Trabalhando com Caixas, Botões e Campos
Construindo GUIs
![Page 173: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/173.jpg)
Botões
Trabalhando com Caixas, Botões e Campos
Construindo GUIs
...
sim = new JButton("Sim");
nao = new JButton("Nao");
carro = new JCheckBox("Carro");
moto = new JCheckBox("Moto");
casa = new JCheckBox("Casa");
masculino = new JRadioButton("Masc");
feminino = new JRadioButton("Fem");
luz = new JToggleButton("Acesso");
...
![Page 174: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/174.jpg)
Trabalhando com Caixas, Botões e Campos
Construindo GUIs
• Campos – usados para entrada de dados• JTextField – caixa de texto livre, com uma única linha e
sem formatação• JTextArea – caixa de texto livre, com múltiplas linhas e
sem formatação• JPassowordField – específico para entrada de senhas
ou dados sensíveis.• JFormattedTextField – caixa de texto com máscara de
entrada.
![Page 175: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/175.jpg)
Trabalhando com Caixas, Botões e Campos
Construindo GUIs
• Campos
lblNome = new JLabel("Nome");
lblEmail = new JLabel("Email");
lblNascimento = new JLabel("Nascimento");
lblFone = new JLabel("Fone");
lblEndereco = new JLabel("Endereco");
txtNome = new JTextField(40);
txtEmail = new JTextField(35);
txtFone = new JTextField(15);
txtEndereco = new JTextArea("", 3, 35);
// cria-se o elemento de entrada formatada usando um formato pre-definido
// atraves da java.text.SimpleDateFormat
dateFormater = new SimpleDateFormat("dd/MM/yyyy");
txtNascimento = new JFormattedTextField( dateFormater );
txtNascimento.setColumns( 20 );
![Page 176: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/176.jpg)
Estes componentes do SWING, para facilitar asua construção e serem mais flexíveis,seguem o modelo MVC (Model-View-Controller)
Trabalhando com Listas, Combos e Tabelas
Construindo GUIs
![Page 177: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/177.jpg)
Modelo MVC
Trabalhando com Listas, Combos e Tabelas
Construindo GUIs
A responsabilidade das classes que secomportam como Model, é representar ummodelo de dados e garantir o estado dessemodelo.
A responsabilidade das classes que secomportam como View é prover uma forma devisualização para aquele modelo naqueleestado.
E o Controller atua como controlador destasescolhas e visualizações.
![Page 178: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/178.jpg)
Listas - JList
Trabalhando com Listas, Combos e Tabelas
Construindo GUIs
quando formos manipular objetos dentro de uma lista na tela usaremos:
• javax.swing.JList – controlador;
• javax.swing.DefaultListModel – modelo;
• javax.swing.DefaultListCellRenderer - visualização;
![Page 179: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/179.jpg)
Listas - JComboBox
Trabalhando com Listas, Combos e Tabelas
Construindo GUIs
quando formos manipular objetos dentro de uma combo na tela usaremos:
• javax.swing.JComboBox – controlador;
• javax.swing.DefaultComboBoxModel – modelo;
• javax.swing.plaf.basic.BasicComboBoxRenderer - visualização;
• javax.swing.plaf.basic.BasicComboBoxEditor - editor;
![Page 180: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/180.jpg)
Tabelas - JTable
Trabalhando com Listas, Combos e Tabelas
Construindo GUIs
quando formos manipular objetos dentro de uma tabela na tela usaremos:
• javax.swing.JComboBox – controlador;
• javax.swing.table.DefaultTableModel – modelo;
• javax.swing.table.DefaultTableCellRender - visualização;
• javax.swing.DefautCellEditor- editor;
![Page 181: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/181.jpg)
Discussão
• Qual o melhor processo para se desenhar uma GUI?
• No capítulo atual, as GUIs estão restritas á aplicações stand-alone, como fica uma GUI na WEB?
• Quando estamos desenhando GUIs não seria melhor pensar em componentes generéricos?
Construindo GUIs
![Page 182: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/182.jpg)
Exercícios
Construindo GUIs
![Page 183: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/183.jpg)
Tratamento de Eventos para GUIs
![Page 184: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/184.jpg)
Agenda• Modelo de Delegação para Tratamento de
Eventos• Implementando o Tratamento de Eventos• Tratando Eventos Comuns• Tratando Eventos de Janelas• Tratando Eventos de Botões e Menus• Tratando Eventos de Textos• Tratando Eventos de Combos• Tratando Eventos de Listas• Tratando Eventos de Tabelas• Discussão• Exercícios
Tratamento de Eventos para GUIs
![Page 185: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/185.jpg)
Modelo de Delegação para Tratamento de Eventos
Tratamento de Eventos para GUIs
O que é um evento?
• Objeto que representa a ação do usuário na GUI• Superclasse dos eventos java.util.EventObject• Categorizada por tipo (Action, Component, Item, Text e
outros)• Classes e interfaces do pacote java.awt.event e
javax.swing.event;
![Page 186: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/186.jpg)
Modelo de Delegação para Tratamento de Eventos
Tratamento de Eventos para GUIs
Delegando o Tratando de um evento• Criamos uma classe que trata um ou mais tipos de
eventos dependendo do tipo de evento escolhido.• Extendemos uma classe java.awt.event.XXXAdapter;• Implementamos uma interface java.awt.event. XXXListener;
• Usando um método específico do componente,registramos o tratador do evento ( addXXXListener() )
• Quando o evento for gerado, o objeto XXXEvent serádelegado para o objeto tratador registrado pelo listener.
![Page 187: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/187.jpg)
Tratamento de Eventos para GUIs
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CanvasPanel extends JFrame {
private Canvas areaDesenho;
...
public void init() {
// registra para o canvas, o listener capaz de tratar
// os eventod de movimento do mouse
areaDesenho.addMouseMotionListener ( new MouseMotionHandler() );
...
}
// por facilidade usamos uma classe interna para definir o tratamento de eventos
// Esta classe trata eventos de movimentação do mouse
class MouseMotionHandler extends MouseMotionAdapter {
// escolhido tratar o evento de movimento arrastar do mouse
public void mouseDragged(MouseEvent me) {
// recupera o objeto Graphics e desenha no Canvas
// de acordo com a posicao do mouse
areaDesenho.getGraphics().drawString("*", me.getX(), me.getY() );
}
}
}
Exemplo de implementação usando Adapter
![Page 188: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/188.jpg)
Tratamento de Eventos para GUIsimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CanvasPanel2 extends JFrame {
private Canvas areaDesenho;
public void init() {
...
// registra para o canvas, o listener capaz de tratar
// os eventod de movimento do mouse
areaDesenho.addMouseMotionListener ( new MouseMotionHandler2() );
...
}
// por facilidade usamos uma classe interna para definir o tratamento de eventos
// Esta classe trata eventos de movimentação do mouse
class MouseMotionHandler2 implements MouseMotionListener {
public void mouseMoved(MouseEvent me) {
// sem implementacao
}
// escolhido tratar o evento de movimento arrastar do mouse
public void mouseDragged(MouseEvent me) {
// recupera o objeto Graphics e desenha no Canvas
// de acordo com a posicao do mouse
areaDesenho.getGraphics().drawString("*", me.getX(), me.getY() );
}
}
...
}
Exemplo de implementação usando Listener
![Page 189: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/189.jpg)
Tratando Eventos Comuns
Tratamento de Eventos para GUIs
Tipos de Eventos• Cada tipo de componente tem um conjunto de eventos
associados, para isso devemos pesquisar no componentequais listeners podem ser registrados ( ver métodosJComponent.addXXXListener() )
• O tipos de eventos mais comuns são:
![Page 190: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/190.jpg)
Tratando Eventos de Janelas
Tratamento de Eventos para GUIs
Tipos de Eventos• Podemos associar eventos de Janelas a JFrame, JWindow
e JDialog( ver método JWindow.addWindowListener() )
• O tipos de eventos são:
![Page 191: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/191.jpg)
Tratando Eventos de Botões e Menus
Tratamento de Eventos para GUIs
Tipos de Eventos• Podemos associar eventos de Botões a todas as classes
filhas da javax.swing.AbstractButton
(ver método AbstractButton.addActionListener() )
• O tipos de eventos são:
![Page 192: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/192.jpg)
Tratando Eventos de Botões e Menus
Tratamento de Eventos para GUIs
Teclas de Atalhos para Menus• Usamos o método JMenuItem.setAccelerator(javax.swing.KeyStroke );
KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK, false);
menuItem.setAccelerator( key );
![Page 193: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/193.jpg)
Tratando Eventos de Textos
Tratamento de Eventos para GUIs
Tipos de Eventos• Podemos associar eventos de texto para facilitar a
manipulação da entrada de dados(ver método JTextComponent.addActionListener() )
• O tipos de eventos são:
![Page 194: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/194.jpg)
Tratando Eventos de Listas
Tratamento de Eventos para GUIs
Tipos de Eventos• Podemos associar eventos de uma Lista para facilitar a
escolha de itens de uma lista(ver método JList.addListSelectionListener() ouaddItemListener() )
• O tipos de eventos são:
![Page 195: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/195.jpg)
Tratando Eventos de Combos
Tratamento de Eventos para GUIs
Tipos de Eventos• Podemos associar eventos de um Combo para facilitar a
escolha de itens(ver método JComboBox.addActionListener() eaddItemListener() )
• O tipos de eventos são:
![Page 196: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/196.jpg)
Tratando Eventos de Tabelas
Tratamento de Eventos para GUIs
Tipos de Eventos• Podemos associar eventos de um Tabela para facilitar a
escolha de itens bem como alterar dados do modelo.(ver método JList.addMouseListener(),addListSelectionListener(),DefaultTableModel.addTableModelListener() )
O tipos de eventos são:
![Page 197: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/197.jpg)
Discussão
• Numa aplicação devemos separar claramente asresponsabilidades, em classes de dados (representam o modelode negócio), classes de serviços (aquelas que acessam recursos,como arquivos, bancos, etc) das classes de GUI?
• Porque devemos fazer essa separação?
• Significa então que é nas classes de Eventos definidas dentro das GUIs que faremos as chamadas as classes de negócio e classes de serviço?
Tratamento de Eventos para GUIs
![Page 198: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/198.jpg)
Exercícios
Tratamento de Eventos para GUIs
![Page 199: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/199.jpg)
Programação Para Redes (Network Programming)
![Page 200: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/200.jpg)
Agenda• Introdução• Trabalhando com Sockets Streams• Codificando um Servidor e um Client• Discussão• Exercícios
Programação para Redes
![Page 201: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/201.jpg)
Introdução
java.net API
• Fornece os componentes para a comunicação em Rede;• Suporte a IPV4 e IPV6• Suporte a TCP (Comunicação Síncrona) e UDP
(Comunicação Assíncrona)• Permite a criação de aplicações Client (Se conecta a
alguém) e Server (Recebe conexões de alguém)• Pacote java.net
Programação para Redes
![Page 202: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/202.jpg)
Trabalhando com Socket Streams para TCP
Modelo
Programação para Redes
![Page 203: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/203.jpg)
Trabalhando com Socket Streams para TCP
Modelo
Programação para Redes
Um Server publica uma PORTA num endereço IP usando o ServerSocket
Um Client se conecta ao IP do Server na PORTA publicada usando um Socket
Nesse momento usa-se objetos de InputStream ou OutputStream para a troca de mensagens
![Page 204: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/204.jpg)
Codificando um Servidor e um Client
Programação para Redes
import java.net.*;
import java.io.*;
public class SimpleServer {
public static void main(String args[]) {
ServerSocket s= null;
try {
s = new ServerSocket(5432);
} catch (IOException e) {
e.printStackTrace();
}
for (;;) {
try {
Socket s1 = s.accept();
OutputStream s1out = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(s1out);
// Envia a mensagem
dos.writeUTF("Hello Net World!");
dos.close();
s1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
![Page 205: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/205.jpg)
Codificando um Servidor e um Client
Programação para Redes
import java.net.*;
import java.io.*;
public class SimpleClient {
public static void main(String args[]) {
try {
// Endereço IP é Localhost
Socket s1 = new Socket("127.0.0.1", 5432);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
// le a mensagem enviada pelo servidor
System.out.println(dis.readUTF());
dis.close();
s1.close();
} catch (ConnectException connExc) {
System.err.println("Could not connect to the server.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
![Page 206: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/206.jpg)
Discussão
• Que tipos de sistemas, aplicações e programas podemosdesenvolver usando a comunicação em rede?
• Que tipos de dados podem ser passados pela rede? Depende doStream usado?
• Em aplicações que rodarão em redes heterogêneas, como fica acomunicação e o dados?
Programação para Redes
![Page 207: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/207.jpg)
Exercícios
Programação para Redes
![Page 208: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/208.jpg)
Programação MultiTarefa (MultiThread Programming)
![Page 209: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/209.jpg)
Agenda• Introdução• Java Thread API: Classes e Interfaces• Construindo Threads• Manipulando Threads• Máquina de Estados• Controlando Concorrência• Controlando a Execução• Construindo e Executando Timers• Discussão• Exercícios
Programação MultiTarefa
![Page 210: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/210.jpg)
Introdução
O que é MultiTarefa?• Capacidade de executar mais de uma operação ao
mesmo tempo (paralelismo)
• Em Java, o paralelismo é implementado usando-seThreads.
• Usamos Threads, quando desejamos implementarprocessos paralelos, concorrentes ou automatizados.
Programação MultiTarefa
![Page 211: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/211.jpg)
Introdução
O que são Threads?
• São objetos que possuem:• Uma área de dados;• Um trecho de código que será executado;• E utilizam um tempo de CPU (Representada pelo objetojava.lang.Thread);
• Prioridade de execução;
Programação MultiTarefa
![Page 212: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/212.jpg)
Java Thread API: Classe e Interfaces
Programação MultiTarefa
![Page 213: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/213.jpg)
Java Thread API: Classe e Interfaces
Programação MultiTarefa
As classes Thread, ThreadGroup e a interface Runnable sãousadas quando queremos construir aplicações que manipulemmúltiplas execuções em paralelo, e que geralmente tem tempode execução definido e finito.
As classes Timer e TimerTask são usadas quando queremos construir aplicações que manipulem processos e execuções que geralmente tem tempo de execução cíclico e finito.
![Page 214: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/214.jpg)
Construindo Threads – especializando a java.lang.Thread
Programação MultiTarefa
![Page 215: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/215.jpg)
Construindo Threads – especializando a java.lang.Thread
Programação MultiTarefa
public class ThreadTest {
public static void main(String a[]) {MyThread mt = new MyThread();mt.start();
}}
public class MyThread extends Thread {
// atributos de instancia // que será usado nesta Thread
public void run() {
// código que será executado// em paralelo com outras// Threads
}
}
![Page 216: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/216.jpg)
Construindo Threads – implementado a java.lang.Runnable
Programação MultiTarefa
![Page 217: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/217.jpg)
Construindo Threads – implementado a java.lang.Runnable
Programação MultiTarefa
public class MyRunnable extends Runnable {
// atributos de instancia // que será usado nesta Thread
public void run() {
// código que será executado// em paralelo com outras// Threads
}
}public class RunnableTest {
public static void main(String a[]) {MyRunnable mr = new MyRunnable ();Thread cpu = new Thread( mr );cpu.start();
}}
![Page 218: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/218.jpg)
Manipulando Threads
Programação MultiTarefa
Principais métodos da java.lang.Thread
![Page 219: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/219.jpg)
Manipulando Threads - Prioridades
Programação MultiTarefa
Trabalhando com Prioridades
![Page 220: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/220.jpg)
Máquina de Estados
Programação MultiTarefa
![Page 221: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/221.jpg)
Controlando a Concorrência
Sincronizando
• Quando temos algum atributo de instância de um objetoque é compartilhado por mais de uma Thread, devemoscontrolar a concorrência do acesso a ele.
• Podemos usar o modificador synchronized nosmétodos que manipulam o atributo.
• Podemos usar um bloco synchronized durante amanipulação do atributo.
Programação MultiTarefa
![Page 222: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/222.jpg)
Controlando a Concorrência
Programação MultiTarefa
public class SyncStack {
private Stack stack;
public SyncStack() {stack = new Stack();
}
// método sincronizadopublic synchronized void put(Object obj) {
stack.add( obj );}
public Object get(int index) {Object obj = null;// bloco sincronizadosynchronized ( stack ) {
obj = stack.get( index );}return obj;
}
// método sincronizadopublic synchronized void clear() {
stack.removeAllElements();}
}
![Page 223: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/223.jpg)
Controlando a Execução
Podemos mudar o estado de uma Thread usando:
• Thread.sleep() e outros métodos da classe Thread,entretanto, quando queremos controlar o acesso a umobjeto, devemos usar técnica de “Object Locking andWait”, por ser mais eficiente.
Programação MultiTarefa
![Page 224: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/224.jpg)
Construindo e executando Timers
Programação MultiTarefa
Timers
• Objetos que executam tarefas agendadas e cíclicas (emciclos)
• Classes: java.util.Timer e java.util.TimerTask
![Page 225: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/225.jpg)
Construindo e executando Timers
Programação MultiTarefa
Criamos uma classe que representa a Tarefa estendendo a java.utl.TimerTask
Criamos um Timer, e neste timer, schedulamos (agendamos) a execução a Tarefa
![Page 226: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/226.jpg)
Construindo e executando Timers
Programação MultiTarefa
public class MyTimerTask extends java.util.TimerTask {
public void run() {System.out.println ( System.currentTimeMillis() );
}}
public class TestMyTimerTask {
public static void main(String args[]) throws Exception {MyTimerTask mtt = new MyTimerTask();java.util.Timer timer = new java.util.Timer();timer.schedule( mtt, 10, 1000 );Object obj = new Object();synchronized( obj ) {
obj.wait();}
}}
![Page 227: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/227.jpg)
Discussão• Qual a melhor maneira de se especificar um Thread? Estender a
classe java.lang.Thread ou implementar a interfacejava.lang.Runnable?
• Nas GUIs usamos as Threads para preencher barras de progressode acordo com o andamento de um processo, nas aplicaçõesWEB faremos isso?
• Quando criamos um servidor que necessita atender mais de umusuário ao mesmo tempo, usaremos os conceitos de Threads?
• Usando todos os elementos de Threads (Thread, Monitor, Task,etc), podemos fazer aplicativos complexos e ricos nogerenciamento de processos, que tipos de aplicações são essas?
Programação MultiTarefa
![Page 228: Linguagem de Programação Java para Iniciantes](https://reader030.vdocuments.site/reader030/viewer/2022012901/55ac18e11a28ab3c5b8b45bf/html5/thumbnails/228.jpg)
Exercícios
Programação MultiTarefa