Anúncio
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Destaque(20)

Anúncio
Anúncio

Último(20)

Linguagem de Programação Java para Iniciantes

  1. Linguagem de Programação Java
  2. 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)
  3. Iniciando
  4. 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
  5. Revisão de Conceitos
  6. 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
  7. 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
  8. Tipos de programas Java • Stand-Alone • Java Applets™ • Java Servlets™ • Java Midlets™ • JavaBeans™ Revisão de Conceitos
  9. “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
  10. 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
  11. 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
  12. 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 Revisão de Conceitos
  13. Entendendo a Java Runtime Enviromnent Sistema Operacional Java Virtual Machine bytecode Revisão de Conceitos
  14. Entendendo a Portabilidade do Java Revisão de Conceitos
  15. 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
  16. Anatomia de uma Classe Java Revisão de Conceitos
  17. 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
  18. 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 ?: Revisão de Conceitos
  19. 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
  20. Operadores de Comparação Igualdade == Maioridade < Menoridade > Maior ou igual >= Menor ou igual <= Diferente != Revisão de Conceitos
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. Controle de Fluxo Uso do continue for(int i = 0; i < 10; i++){ if (i == 5){ continue; } //.... } Revisão de Conceitos
  27. Controle de Fluxo for(int i = 0; i < 10; i++){ if (i == 5){ break; } //.... } Revisão de Conceitos Uso do break
  28. 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
  29. 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
  30. 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
  31. • 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
  32. 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? Revisão de Conceitos
  33. Arrays
  34. Arrays Agenda • Java Arrays • Definindo Arrays • Cópia elementos • Manipulando elementos
  35. 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
  36. Arrays • Sintaxe tipo identificador[] = new tipo[tamanho]; int[] inteiros = new int[10]; String[] nomes = new String[10]; • Exemplos Java Arrays
  37. Arrays int[] inteiros = new int[10]; • Visualização Gráfica Java Arrays
  38. Java Arrays • Podem ter “n” dimensões formando matrizes int[][] dados = new int[10][10]; dados[0][0] = 100; Arrays
  39. 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
  40. Copiando Elementos int original[] = { 1, 2, 3, 4, 5, 6 }; int copia[] = new int[10]; System.arraycopy(original, 0, copia, 0, original.length); Arrays
  41. 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
  42. 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? Arrays
  43. Exercícios Arrays
  44. Desenho Avançado de Classes
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. Representação na UML Define um modelo completo para solucionar um problema computacional. Desenho Avançado de Classes
  51. 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
  52. 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
  53. 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.
  54. 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 }
  55. 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!
  56. 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. Desenho Avançado de Classes
  57. Polimorfismo • Subclasses • Sobrescrita de método • Sobrecarga da método Desenho Avançado de Classes
  58. 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
  59. 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
  60. 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). Desenho Avançado de Classes
  61. 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
  62. 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
  63. 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
  64. Revisão Desenho Avançado de Classes
  65. 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.
  66. 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 { ... }
  67. 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) { } }
  68. 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!
  69. 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.
  70. 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)
  71. 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.
  72. 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]); }
  73. 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(); }
  74. Uso de Interfaces (interface) Desenho Avançado de Classes 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.
  75. 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.
  76. 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
  77. 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; } }
  78. 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
  79. Organizando as Classes em Pacotes (package) Desenho Avançado de Classes Exemplos do Banco e da Loja Notação da UML
  80. 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 { .. }
  81. 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? Desenho Avançado de Classes
  82. Exercícios Desenho Avançado de Classes
  83. Manipulando Erros e Exceções
  84. 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
  85. 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 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
  86. 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 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
  87. Hierarquia da exceções Manipulando Erros e Exceções Todas as exceções e erros são subclasses de java.lang.Throwable
  88. Exceções mais conhecidas Manipulando Erros e Exceções • 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;
  89. Exceções mais conhecidas Manipulando Erros e Exceções • 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.
  90. 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.
  91. 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 }
  92. 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.
  93. 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 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); } }
  94. 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; } } } }
  95. Criando exceções Customizadas Manipulando Erros e Exceções Dessa forma criamos uma exceção customizada!
  96. 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); } }
  97. 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; } } }
  98. 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() ); } } }
  99. 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? Manipulando Erros e Exceções
  100. Exercícios Manipulando Erros e Exceções
  101. Desenvolvimento de Aplicações em Java
  102. 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
  103. 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
  104. 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
  105. 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
  106. 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”
  107. 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
  108. Desenvolvimento de Aplicações em Java Usos da Classe java.lang.String public 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! "); } } }
  109. 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 = "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 ); } }
  110. 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
  111. Desenvolvimento de Aplicações em Java Java Streamers 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.
  112. Desenvolvimento de Aplicações em Java Java Streamers – java.io.InputStream Streamers de entrada (do recurso para a aplicação)
  113. Desenvolvimento de Aplicações em Java Java Streamers – java.io.OutputStream Streamers de saída (da aplicação para o recurso)
  114. Desenvolvimento de Aplicações em Java Readers e Writers 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.
  115. Desenvolvimento de Aplicações em Java Readers – java.io.Reader Readers (entrada de dados do recurso para a aplicação)
  116. Desenvolvimento de Aplicações em Java Writers – java.io.Writer Writers (saída de dados da aplicação para o recurso)
  117. Desenvolvimento de Aplicações em Java Categorias e uso
  118. Desenvolvimento de Aplicações em Java Categorias e uso
  119. 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(); } } }
  120. 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(); } } }
  121. 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(); } } }
  122. Desenvolvimento de Aplicações em Java Arquivos de Acesso Randômico 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.
  123. 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).
  124. 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
  125. 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 + "’"); } } }
  126. 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.
  127. Desenvolvime