lpj i ads2_apresentacao_aulas

143
Linguagem de Programação I Análise e Desenvolvimento de Sistemas 2º Semestre Prof. Oziel Moreira Neto [email protected] http://blog.oziel.com.br

Upload: oziel-moreira-neto

Post on 06-Jun-2015

271 views

Category:

Documents


27 download

TRANSCRIPT

Page 1: Lpj i ads2_apresentacao_aulas

Linguagem de Programação I Análise e Desenvolvimento de Sistemas 2º Semestre Prof. Oziel Moreira Neto [email protected] http://blog.oziel.com.br

Page 2: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Linguagem de Programação Java

Agenda – Iniciando – Conceitos – Arrays – Desenho Avançado de Classes – Manipulação de Erros e Exceções – Desenvolvimento de Aplicações

Page 3: Lpj i ads2_apresentacao_aulas

Iniciando

Page 4: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

Conceitos

Page 6: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 7: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Distribuições da Tecnologia Java

Java ™

Standard Edition

• Cliente/Servidor

• Applet

• Departamental

Java ™

Enterprise Edition

• eBusiness

• eCommerce

• Corporativo

Java ™

Micro Edition

• Telefone celular

• Dispositivos eletrônicos

• Móvel

Page 8: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Tipos de programas Java

• Stand-Alone

• Java Applets™

• Java Servlets™

• Java Midlets™

• JavaBeans™

Page 9: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

“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

Page 10: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 11: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 12: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Entendendo a Plataforma Java

JVM

JRE

JDK

• JVM – Java Virtual Machine Máquina Virtual Java

• JRE – Java Runtime Environmnent

Ambiente de execução de aplicativos Java

• JDK – Java Development Kit Ambiente de desenvolvimento Java

Também chamado de J2SDK – Java 2 Software Development Kit

Page 13: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Entendendo a Java Runtime Enviromnent

Sistema Operacional

Java Virtual Machine

bytecode

Page 14: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Entendendo a Portabilidade do Java

Page 15: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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.

Page 16: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Anatomia de uma Classe Java

Page 17: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 18: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Operadores Negaçã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 ?:

Page 19: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Operadores de bits

Deslocamento a esquerda <<

Deslocamento a direita >>

Deslocamento a direita (unsigned) >>>

Inversão de bits ~

Resto da Divisão %

Complemento (XOR) ^

Page 20: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Operadores de Comparação

Igualdade ==

Maioridade <

Menoridade >

Maior ou igual >=

Menor ou igual <=

Diferente !=

Page 21: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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 }

Page 22: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Estruturas de Repetição - WHILE sintaxe:

while (condicao booleana) { // bloco de código que sera repetido // ate que a condição booleana seja false }

Page 23: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 24: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 25: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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 }

Page 26: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Controle de Fluxo

Uso do continue

for(int i = 0; i < 10; i++){ if (i == 5){ continue; } //.... }

Page 27: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Controle de Fluxo

for(int i = 0; i < 10; i++){ if (i == 5){ break; } //.... }

Uso do break

Page 28: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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

Page 29: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

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!

Page 30: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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

Page 32: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Conceitos

Discussão

• O que se entende afinal pela Tecnologia e Plataformas do Java?

• Sabendo que uma classe Java pode facilmente ser modelada, então é fácil analisa-la e codifica-la?

• Programar em Java, não é só codificar? Exige um entendimento prévio do problema?

Page 33: Lpj i ads2_apresentacao_aulas

Arrays

Page 34: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

Agenda – Java Arrays – Definindo Arrays – Cópia elementos – Manipulando elementos

Page 35: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

Java Arrays

• Sintaxe

tipo identificador[] = new tipo[tamanho];

int[] inteiros = new int[10];

String[] nomes = new String[10];

• Exemplos

Page 37: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

Java Arrays

int[] inteiros = new int[10];

• Visualização Gráfica

Page 38: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

Java Arrays

• Podem ter “n” dimensões formando matrizes

int[][] dados = new int[10][10];

dados[0][0] = 100;

Page 39: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

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

Page 40: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

Discussão

• Para que servem os Arrays nas linguagens de programação?

• Vetores e matrizes são elementos complexos de

manipular, não existe nada mais fácil em Java para se manipular objetos?

• Quando um objeto tiver uma relação múltipla com

outro, vamos definir usando arrays?

Page 43: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Arrays

Exercícios

Page 44: Lpj i ads2_apresentacao_aulas

Desenho Avançado de Classes

Page 45: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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

Page 46: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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

Page 47: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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

Page 48: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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.

Page 49: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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 .

Page 50: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Representação na UML

Define um modelo completo para solucionar um problema computacional.

Page 51: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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

Desenho Avançado de Classes

Objetos a partir de subclasses

Page 52: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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

Desenho Avançado de Classes

Objetos a partir de subclasses

Instancias de Cliente: Mario e Oscar

Page 53: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 CompactDisc extends Produto { // definição de classe }

Page 55: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Polimorfismo

• POLIMORFISMO = Muitas Formas Ou 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.

Page 57: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Polimorfismo – Subclasses – Sobrescrita de método – Sobrecarga da método

Page 58: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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.

Page 59: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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

Page 60: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Overriding – Sobrescrita de métodos – Invocação Virtual de Métodos Quando 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).

Page 61: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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

Page 62: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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.

Page 63: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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;

Page 64: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Revisão

Page 65: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 ContaEspecial extends Conta { ... }

Page 67: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Classes e Métodos Abstratos (abstract)

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Classes e Métodos Abstratos (abstract)

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.

Page 71: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Interfaces (interface)

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Interfaces (interface)

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes Uso de Interfaces (interface)

public class Livro extends Produto implements Vendavel { ... public double getValorVenda() { return getPreco() * 1.2; } } public class CompactDisc extends Produto implements 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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Interfaces (interface)

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Interfaces (interface)

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Uso de Interfaces (interface) 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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Organizando as Classes em Pacotes (package)

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: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Organizando as Classes em Pacotes (package)

Codificação

Nas classes de um pacote colocamos a definição de package

package loja; public class Carrinho { .. }

package loja; public class Catalogo { .. }

Nas classes de outro pacote que necessitam usar as classes acima, usamos a definição de import

import loja.*; public class TestaProdutos { .. }

Page 80: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

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 ferramenta poderosa na adição de tipos de objetos, então quer dizer que ele nos permite ter sistemas mais flexíveis e que tem menos impacto nas mudanças?

• Qual a necessidade de usar Classes Abstratas?

• Qual a maior diferença de Classes Abstratas e Interfaces?

• Porque usamos os pacotes?

Page 81: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenho Avançado de Classes

Exercícios

Page 82: Lpj i ads2_apresentacao_aulas

Manipulando Erros e Exceções

Page 83: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

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

Page 84: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

O que são erros e exceções?

São objetos e possuem classes para serem definidas. Exceções estão associadas a condições não previstas

durante a execução de uma aplicação Java, e no caso de acontecerem, a execução pode continuar, exemplo, uma conversão numérica que falhou.

Tem o conceito de serem “arremessadas” ao chamador de

um método, e são filhas da classe java.lang.Exception

Page 85: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

O que são erros e exceções?

São objetos e possuem classes para serem definidas. Erros estão associados a condições não previstas durante a

execução de uma aplicação Java, e no caso de acontecerem, a execução não pode continuar, exemplo, falta de memória na JVM.

Tem o conceito de serem “arremessadas” ao chamador de

um método, e são filhas da classe java.lang.Error

Page 86: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Hierarquia da exceções

Todas as exceções e erros são subclasses de java.lang.Throwable

Page 87: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções Exceções mais conhecidas

• java.lang.ArithmeticException - erro de aritmética;

• java.lang.NumberFormatException – erro de formatação numérica;

• java.lang.ArrayIndexOutOfBoundsException – erro de manipulação de posições em arrays;

• java.lang.NullPointerException – erro ao chamar um membro de objeto nulo;

• java.io.IOException – erro de entrada e saída;

• java.lang.ClassNotFoundException – erro de carga de classes;

Page 88: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções Exceções mais conhecidas

• java.lang.RuntimeException - erro não previsto na execuçã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 apesar de não permitir que o programa continue.

Page 89: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Capturando e tratando 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 90: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Estrutura try – catch - finally

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 91: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Estrutura try – catch - finally

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 92: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Usando try – catch - finally 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 IOException System.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 erro ioException.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 93: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Criando exceções Customizadas

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 94: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Criando exceções Customizadas

Dessa forma criamos uma exceção customizada!

Page 95: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Criando exceções Customizadas

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 96: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Arremessando exceções Customizadas

Dessa forma usamos 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 97: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Tratando exceções Customizadas 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 98: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Discussão

• Já que as exceções em Java são objetos, então temos classes para representá-las?

• Como identificar que um método lança uma exceção seu

chamador? • Devemos então sempre definir exceções customizadas para

nossas aplicações?

• Qual a principal diferença entre CHECKED e UNCHECKED Exceptions?

Page 99: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Manipulando Erros e Exceções

Exercícios

Page 100: Lpj i ads2_apresentacao_aulas

Desenvolvimento de Aplicações em Java

Page 101: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Agenda – Principais API’s – 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

Page 102: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

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.

Principais API’s

Page 103: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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;

Principais API’s

Page 104: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Usamos a passagem de dados como parâmetros em linha de comando com o intuito de passar valores a uma aplicaçã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 105: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 106: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 107: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Usos da Classe java.lang.String public class TesteString { public static void main(String args[]) { String texto = “Oracle 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 108: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Usos da classe StringBuffer e StringTokenizer import java.util.StringTokenizer; public class TesteStringBuffer { public static void main(String args[]) { String texto = “Oracle 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 109: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

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

Entrada e saída de dados.

Page 110: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Usados para manipular byte (ASCII) de forma seqüencial (escrita ou leitura do arquivo todo).

Ligam uma fonte de dados (DataSource) até ao

aplicativo (Program) Geralmente usados para troca de dados entre

aplicações Java e Non-Java.

Java Streamers

Page 111: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Streamers de entrada (do recurso para a aplicação)

Java Streamers – java.io.InputStream

Page 112: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Streamers de saída (da aplicação para o recurso)

Java Streamers – java.io.OutputStream

Page 113: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Usados para manipular char (UTF-16) de forma seqüencial (escrita ou leitura do arquivo todo).

Ligam uma fonte de dados (DataSource) até ao

aplicativo (Program) Geralmente usados para troca de dados entre

aplicações Java e Java. Padrão para as aplicações WEB.

Readers e Writers

Page 114: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Readers (entrada de dados do recurso para a aplicação)

Readers – java.io.Reader

Page 115: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Writers (saída de dados da aplicação para o recurso)

Writers – java.io.Writer

Page 116: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Categorias e uso

Page 117: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Categorias e uso

Page 118: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Exemplos import 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 119: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Exemplos import 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 120: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Exemplos import java.io.*; public class GravaArquivo { public static void main (String[] args) { File file = new File(args[0]); try { BufferedReader in = new BufferedReader( new InputStreamReader( System.in )); PrintWriter out = new PrintWriter( new FileWriter(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 121: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Usados para manipular arquivos de dados que de forma randômica (escrita em leitura em qualquer parte do arquivo).

Ligam uma fonte de dados (DataSource) até ao aplicativo

(Program) Geralmente usados para troca de dados entre aplicações

Java e Non-Java. Permite a implementação em Java do conceito de

Registro.

Arquivos de Acesso Randômico

Page 122: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Classe: java.io.RandomAccessFile

Arquivos de Acesso Randômico

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 123: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 124: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Trabalho com Propriedades (Properties)

Listando as propriedades do sistema import 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 125: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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=papel usuario=user administrador=admin convidado=guest

#aplicacao.ini #arquivo de configuração diretorioTemp=c:/temp diretorioApp=d:/appl

Arquivos de texto simples, onde do lado esquerdo do igual temos a propriedade e do lado direito seu valor.

Page 126: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Trabalho com Arquivos de Propriedades

Lendo um arquivo de propriedades // class CarregaPropriedades.java import 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 127: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Trabalho com Arquivos de Propriedades

Obtendo as propriedades lidas:

// class TesteCarregaPropriedades.java public 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 128: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 (SE e ME); • Permitir a redundância em aplicações EE; • Permitir armazenar dados em JavaCards™ (ME); • Etc.

Page 129: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 130: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Serialização de Objetos

Para serializar um objeto, sua classe deve implementar a interface java.io.Serializable

// Pessoa.java public 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 131: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Exemplos de Serialização de Objetos // SerializadorPessoa.java import 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 132: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Exemplos de Serialização de Objetos

// classe TesteSerializadorPessoa.java public 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 133: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 134: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 135: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 136: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 os seguintes métodos da java.lang.Object:

• public boolean equals(Object obj); • public int hashCode();

Page 137: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Coleções de Objetos – Java Collections™

Alterando a classe Pessoa public 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 138: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 139: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 140: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

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 141: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Discussão

• Vimos nesse capítulo uma série de conceitos que são usados em aplicações de fato, ou seja, arquivos de configurações (properties), coleções de objetos, manipulação de arquivos texto e 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 se

implementar? • Podemos usar a serialização de objetos para armazenar nossos

objetos temporariamente e indefinidamente?

Page 142: Lpj i ads2_apresentacao_aulas

oziel moreira neto – [email protected]

Desenvolvimento de Aplicações em Java

Exercícios

Page 143: Lpj i ads2_apresentacao_aulas

Linguagem de Programação I Análise e Desenvolvimento de Sistemas 2º Semestre Prof. Oziel Moreira Neto [email protected] http://blog.oziel.com.br