SlideShare uma empresa Scribd logo
1 de 143
Baixar para ler offline
Linguagem de Programação I
Análise e Desenvolvimento de Sistemas
2º Semestre

Prof. Oziel Moreira Neto
oziel.neto@gmail.com
http://blog.oziel.com.br
oziel moreira neto – oziel.neto@gmail.com


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
Iniciando
oziel moreira neto – oziel.neto@gmail.com




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
Conceitos
oziel moreira neto – oziel.neto@gmail.com




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
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Distribuições da Tecnologia Java

      Java ™              Java ™                   Java ™
 Standard Edition    Enterprise Edition        Micro Edition


• Cliente/Servidor   • eBusiness           • Telefone celular
• Applet             • eCommerce           • Dispositivos
                                           eletrônicos
• Departamental      • Corporativo
                                           • Móvel
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Tipos de programas Java

 • Stand-Alone

 • Java Applets™

                 • Java Servlets™

 • Java Midlets™

 • JavaBeans™
oziel moreira neto – oziel.neto@gmail.com




Conceitos
“Key Features” da Tecnologia Java

 •   Simples               • Portável
 •   Orientada a objetos   • Interpretada
 •   Distribuída           • Alto desempenho
 •   Robusta               • Múltiplas linhas de
 •   Segura                  execução
 •   Neutra em relação à   • Dinâmica
     Plataforma
oziel moreira neto – oziel.neto@gmail.com




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
oziel moreira neto – oziel.neto@gmail.com




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
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Entendendo a Plataforma Java


                     • JVM – Java Virtual Machine
                             Máquina Virtual Java
     JDK

     JRE          • JRE – Java Runtime Environmnent
                   Ambiente de execução de aplicativos Java
    JVM

                    • JDK – Java Development Kit
                      Ambiente de desenvolvimento Java
                 Também chamado de J2SDK – Java 2 Software
                               Development Kit
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Entendendo a Java Runtime Enviromnent




                 bytecode


         Java Virtual Machine




Sistema Operacional
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Entendendo a Portabilidade do Java
oziel moreira neto – oziel.neto@gmail.com




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.
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Anatomia de uma Classe Java
oziel moreira neto – oziel.neto@gmail.com




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
oziel moreira neto – oziel.neto@gmail.com


      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             ?:
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Operadores de bits

      Deslocamento a esquerda                  <<
      Deslocamento a direita                   >>
      Deslocamento a direita (unsigned)       >>>
      Inversão de bits                          ~
      Resto da Divisão                          %
      Complemento (XOR)                         ^
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Operadores de Comparação

      Igualdade                       ==
      Maioridade                       <
      Menoridade                       >
      Maior ou igual                  >=
      Menor ou igual                  <=
      Diferente                       !=
oziel moreira neto – oziel.neto@gmail.com




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
 }
oziel moreira neto – oziel.neto@gmail.com




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

 }
oziel moreira neto – oziel.neto@gmail.com




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 );
oziel moreira neto – oziel.neto@gmail.com




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.

 }
oziel moreira neto – oziel.neto@gmail.com




    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
}
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Controle de Fluxo
      Uso do continue


for(int i = 0; i < 10; i++){

    if (i == 5){
        continue;
    }

    //....

}
oziel moreira neto – oziel.neto@gmail.com




Conceitos
Controle de Fluxo
      Uso do break

  for(int i = 0; i < 10; i++){

      if (i == 5){
          break;
      }

      //....

  }
oziel moreira neto – oziel.neto@gmail.com




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

 }
oziel moreira neto – oziel.neto@gmail.com




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!
oziel moreira neto – oziel.neto@gmail.com




Conceitos
 • Encapsulamento

Definimos uma interface de métodos
                                                      pedido: Pedido
  públicos fornecendo acesso a
  informação do objeto                    - pedidoID: String
                                          - clienteID: String
                                          - notaFiscal:String
                                          - total: double
                    Atributos privados    - ICMS: double
                                          - produtos: List


                                          + adcionarProduto(Produto)
                                          + removerProduto(produtoID)
                                          + recuperaProduto(produtoID)
                   Métodos públicos       + calculaTotal(): double
                                          + calculaImpostos(): double
                                          + encerraPedido(): double
                                          + Pedido(pedidoID, clienteID)
oziel moreira neto – oziel.neto@gmail.com




Conceitos
 • Encapsulamento

Dessa forma, podemos alterar o código
  dos métodos da classe Pedido sem                      pedido: Pedido
  alterar a classe Cliente.
                                            - pedidoID: String
                                            - clienteID: String
     não permitido                          - notaFiscal:String
                                            - total: double
                     Atributos privados     - ICMS: double
                                            - produtos: List

 Cliente
                                            + adcionarProduto(Produto)
                                            + removerProduto(produtoID)
                                            + recuperaProduto(produtoID)
                    Métodos públicos        + calculaTotal(): double
     permitido                              + calculaImpostos(): double
                                            + encerraPedido(): double
                                            + Pedido(pedidoID, clienteID)
oziel moreira neto – oziel.neto@gmail.com




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?
Arrays
oziel moreira neto – oziel.neto@gmail.com


Arrays

Agenda
  –   Java Arrays
  –   Definindo Arrays
  –   Cópia elementos
  –   Manipulando elementos
oziel moreira neto – oziel.neto@gmail.com


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
oziel moreira neto – oziel.neto@gmail.com


 Arrays

Java Arrays

   • Sintaxe

tipo identificador[] = new tipo[tamanho];


   • Exemplos

    int[] inteiros = new int[10];
    String[] nomes = new String[10];
oziel moreira neto – oziel.neto@gmail.com


Arrays

Java Arrays

• Visualização Gráfica

  int[] inteiros = new int[10];
oziel moreira neto – oziel.neto@gmail.com


Arrays

Java Arrays
• Podem ter “n” dimensões formando matrizes

  int[][] dados = new int[10][10];
  dados[0][0] = 100;
oziel moreira neto – oziel.neto@gmail.com


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);
oziel moreira neto – oziel.neto@gmail.com


  Arrays

 Copiando Elementos


int original[] = { 1, 2, 3, 4, 5, 6 };
int copia[] = new int[10];


System.arraycopy(original, 0, copia, 0, original.length);
oziel moreira neto – oziel.neto@gmail.com


Arrays

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]+ " " );
   }
oziel moreira neto – oziel.neto@gmail.com


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?
oziel moreira neto – oziel.neto@gmail.com


Arrays

Exercícios
Desenho Avançado de
      Classes
oziel moreira neto – oziel.neto@gmail.com


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
oziel moreira neto – oziel.neto@gmail.com


 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”.
oziel moreira neto – oziel.neto@gmail.com


  Desenho Avançado de Classes

 Herança                                    Pessoa

A classe “cliente” é uma             - nome: String
                                     - nascimento: Data
   subclasse da classe
                                     + getNome(): String
   “pessoa”, e herda todos os        + getDate() :Date
   atributos e métodos da            +Pessoa(nome)

   classe “pessoa”.
Cliente é uma subclasse de                   Cliente
   Pessoa.                        - clienteID: String
                                  - CPF: String
Pessoa é uma superclasse de
                                   + getClienteID(): String
  Cliente                          + getCPF() : String
                                   + Cliente(clienteID,CPF)
 Construtores não são herdados
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


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 .
oziel moreira neto – oziel.neto@gmail.com


Desenho Avançado de Classes

Representação na UML




Define um modelo completo para
  solucionar um problema
  computacional.
oziel moreira neto – oziel.neto@gmail.com


 Desenho Avançado de Classes

Objetos a partir de subclasses


                                                  Jose:Pessoa

        Pessoa                           nome = Jose Silva

   - nome: String                        nascimento: 10/01/1970
   - nascimento: Data

   + getNome(): String
   + getDate() :Date
   +Pessoa(nome)                                 Joao:Pessoa

                                        nome = Joao Souza
                                        nascimento: 10/10/1980



Instancias de Pessoa: Jose e Joao
oziel moreira neto – oziel.neto@gmail.com


  Desenho Avançado de Classes

 Objetos a partir de subclasses
        Pessoa
                                                      Mario:Cliente
  - nome: String
  - nascimento: Data
                                             nome = Mario Silva Souza

  + getNome(): String                        nascimento: 01/05/1970
  + getDate() :Date                          clienteID = 0056
  +Pessoa(nome)
                                             CPF: 12345678-00


                           Instancias de Cliente: Mario e Oscar
         Cliente
                                                      Oscar:Cliente
- clienteID: String
- CPF: String                                nome = Oscar Souza

+ getClienteID(): String                     nascimento: 02/02/1987
+ getCPF() : String                          clienteID = 0058
+ Cliente(clienteID,CPF)                     CPF: 87654321-00
oziel moreira neto – oziel.neto@gmail.com


Desenho Avançado de Classes

Codificando em Java
•    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.
    public class Pessoa {
             // definição de classe
    }

    public class Cliente extends Pessoa {
             // definição de classe
    }
oziel moreira neto – oziel.neto@gmail.com


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
                   }
oziel moreira neto – oziel.neto@gmail.com


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!
oziel moreira neto – oziel.neto@gmail.com


 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.
oziel moreira neto – oziel.neto@gmail.com


 Desenho Avançado de Classes


Polimorfismo
  – Subclasses
  – Sobrescrita de método
  – Sobrecarga da método
oziel moreira neto – oziel.neto@gmail.com


 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.
oziel moreira neto – oziel.neto@gmail.com


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
oziel moreira neto – oziel.neto@gmail.com


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).
oziel moreira neto – oziel.neto@gmail.com


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
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


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;
oziel moreira neto – oziel.neto@gmail.com


Desenho Avançado de Classes
Revisão
oziel moreira neto – oziel.neto@gmail.com


 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.
oziel moreira neto – oziel.neto@gmail.com


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

  }
oziel moreira neto – oziel.neto@gmail.com


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

    }

}
oziel moreira neto – oziel.neto@gmail.com


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!
oziel moreira neto – oziel.neto@gmail.com


Desenho Avançado de Classes
Uso de Classes e Métodos Abstratos (abstract)

Abstract Classes: Não podem ser instanciadas,
ou seja, é a primeira forma do objeto, e devem ser
especializadas.
 public abstract class Produto extends Object {

     // metodo abstrato não possui corpo de implementacao.
     public abstract String getDescricaoCompleta();
 }
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


  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.
oziel moreira neto – oziel.neto@gmail.com


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

}
oziel moreira neto – oziel.neto@gmail.com


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

Usadas para definir apenas o nome de um
comportamento, e não sua implementação!

   public interface Vendavel {

       public double getValorVenda();

   }

Uma classe, abstrata ou concreta, pode estender
somente uma classe, mas pode implementar múltiplas
interfaces.
oziel moreira neto – oziel.neto@gmail.com


   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.
oziel moreira neto – oziel.neto@gmail.com


   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.
oziel moreira neto – oziel.neto@gmail.com


   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
oziel moreira neto – oziel.neto@gmail.com


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;
         }
}
oziel moreira neto – oziel.neto@gmail.com


 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
oziel moreira neto – oziel.neto@gmail.com


   Desenho Avançado de Classes
  Organizando as Classes em Pacotes (package)


  Codificação

Nas classes de um pacote      package loja;                package loja;
colocamos a definição de
                              public class Carrinho {      public class Catalogo {
package                       ..                           ..
                              }                            }



                                     import loja.*;
Nas classes de outro pacote
que necessitam usar as               public class TestaProdutos {
classes acima, usamos a              ..
definição de import                  }
oziel moreira neto – oziel.neto@gmail.com


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?
oziel moreira neto – oziel.neto@gmail.com


Desenho Avançado de Classes

Exercícios
Manipulando Erros e
     Exceções
oziel moreira neto – oziel.neto@gmail.com


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
oziel moreira neto – oziel.neto@gmail.com

  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
oziel moreira neto – oziel.neto@gmail.com


  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
oziel moreira neto – oziel.neto@gmail.com


   Manipulando Erros e Exceções

  Hierarquia da exceções




Todas as exceções e erros são subclasses de java.lang.Throwable
oziel moreira neto – oziel.neto@gmail.com


 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;
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


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
}
oziel moreira neto – oziel.neto@gmail.com


    Manipulando Erros e Exceções
Estrutura try – catch - finally

try {                       Se ocorrer uma IOException dentro do
        a.method();         bloco try, será executado o bloco A.
        b.method();
        c.method();         Se ocorrer uma Exception que não é
                            filha de IOException dentro do bloco try,
} catch (IOException t) {   será executado o bloco B.
// A
} catch (Exception t) {     Se ocorrer um Error dentro do bloco try,
// B                        será executado o bloco C.
} catch (Throwable t) {
// C                        Independente do que aconteça o bloco
} finally {                 finally será executado.

}
oziel moreira neto – oziel.neto@gmail.com


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);
     }
}
oziel moreira neto – oziel.neto@gmail.com


 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;
                                }
                      }
            }
   }
oziel moreira neto – oziel.neto@gmail.com


Manipulando Erros e Exceções
Criando exceções Customizadas




  Dessa forma criamos uma exceção customizada!
oziel moreira neto – oziel.neto@gmail.com


Manipulando Erros e Exceções
Criando exceções Customizadas


 public class SaldoInsuficienteException
          extends Exception {
          public SaldoInsuficienteException () {
                  super("Falta de saldo para esta operação!");
          }
          public SaldoInsuficienteException (String mensagem) {
                  super(mensagem);
          }
 }



     Dessa forma criamos uma exceção customizada!
oziel moreira neto – oziel.neto@gmail.com


   Manipulando Erros e Exceções
  Arremessando exceções Customizadas
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;
                                    }
                        }
            }


        Dessa forma usamos uma exceção customizada!
oziel moreira neto – oziel.neto@gmail.com


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() );
                          }
              }
  }
oziel moreira neto – oziel.neto@gmail.com


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?
oziel moreira neto – oziel.neto@gmail.com


Manipulando Erros e Exceções

Exercícios
Desenvolvimento de
Aplicações em Java
oziel moreira neto – oziel.neto@gmail.com


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
oziel moreira neto – oziel.neto@gmail.com


  Desenvolvimento de Aplicações em Java

  Principais API’s

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.
oziel moreira neto – oziel.neto@gmail.com


    Desenvolvimento de Aplicações em Java

    Principais API’s

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;
oziel moreira neto – oziel.neto@gmail.com


 Desenvolvimento de Aplicações em Java

 Parâmetros em linha de comando

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
oziel moreira neto – oziel.neto@gmail.com


    Desenvolvimento de Aplicações em Java

    Parâmetros em linha de comando

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] );
         }
     }
                   No método main, existe um array de String, args[],
}                  que representa os parâmetros passados.

# java TesteParametros parametro1           parametro2 “parametro 3”
oziel moreira neto – oziel.neto@gmail.com


 Desenvolvimento de Aplicações em Java

 Manipulando textos e cadeia de caracteres

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
oziel moreira neto – oziel.neto@gmail.com


    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! ");
                   }
         }
}
oziel moreira neto – oziel.neto@gmail.com


    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 );
         }
}
oziel moreira neto – oziel.neto@gmail.com


 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
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java
Java Streamers – java.io.InputStream




Streamers de entrada (do recurso para a aplicação)
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java
Java Streamers – java.io.OutputStream




Streamers de saída (da aplicação para o recurso)
oziel moreira neto – oziel.neto@gmail.com


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.
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java

Readers – java.io.Reader




Readers (entrada de dados do recurso para a aplicação)
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java

Writers – java.io.Writer




Writers (saída de dados da aplicação para o recurso)
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java

Categorias e uso
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java

Categorias e uso
oziel moreira neto – oziel.neto@gmail.com


    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();
                 }
        }
}
oziel moreira neto – oziel.neto@gmail.com


    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();
                 }
        }
}
oziel moreira neto – oziel.neto@gmail.com


  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();
                  }
         }
}
oziel moreira neto – oziel.neto@gmail.com


 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.
oziel moreira neto – oziel.neto@gmail.com


 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).
oziel moreira neto – oziel.neto@gmail.com


  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
oziel moreira neto – oziel.neto@gmail.com


    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 + "’");
                  }
         }
}
oziel moreira neto – oziel.neto@gmail.com


  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                Arquivos de texto simples, onde do
   usuario=user               lado esquerdo do igual temos a
   administrador=admin        propriedade e do lado direito seu
   convidado=guest            valor.

                                #aplicacao.ini
                                #arquivo de configuração
                                diretorioTemp=c:/temp
                                diretorioApp=d:/appl
oziel moreira neto – oziel.neto@gmail.com


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

    }
oziel moreira neto – oziel.neto@gmail.com


   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 ");
                 }
         }
}
oziel moreira neto – oziel.neto@gmail.com


  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.
oziel moreira neto – oziel.neto@gmail.com


  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)
oziel moreira neto – oziel.neto@gmail.com


  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;
                            }
                  }
oziel moreira neto – oziel.neto@gmail.com


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;
      }
}
oziel moreira neto – oziel.neto@gmail.com


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();
                    }
        }
  }
oziel moreira neto – oziel.neto@gmail.com


 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!
oziel moreira neto – oziel.neto@gmail.com


  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;
oziel moreira neto – oziel.neto@gmail.com


  Desenvolvimento de Aplicações em Java

  Coleções de Objetos – Java Collections™
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;
oziel moreira neto – oziel.neto@gmail.com


  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();
oziel moreira neto – oziel.neto@gmail.com


      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;
         }
}
oziel moreira neto – oziel.neto@gmail.com


 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?
oziel moreira neto – oziel.neto@gmail.com


  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;
oziel moreira neto – oziel.neto@gmail.com


 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();
oziel moreira neto – oziel.neto@gmail.com


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?
oziel moreira neto – oziel.neto@gmail.com


Desenvolvimento de Aplicações em Java

Exercícios
Linguagem de Programação I
Análise e Desenvolvimento de Sistemas
2º Semestre

Prof. Oziel Moreira Neto
oziel.neto@gmail.com
http://blog.oziel.com.br

Mais conteúdo relacionado

Mais procurados

Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)raquelcarsi
 
Entendendo o Modelo de Atores
Entendendo o Modelo de AtoresEntendendo o Modelo de Atores
Entendendo o Modelo de AtoresPaulo Siqueira
 
Minicurso - Web sites dinâmicos: PHP com orientação a objetos
Minicurso - Web sites dinâmicos: PHP com orientação a objetosMinicurso - Web sites dinâmicos: PHP com orientação a objetos
Minicurso - Web sites dinâmicos: PHP com orientação a objetosMaradona Morais
 
JS 101 - Introdução ao JavaScript
JS 101 - Introdução ao JavaScriptJS 101 - Introdução ao JavaScript
JS 101 - Introdução ao JavaScriptTheCoreh
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 

Mais procurados (11)

Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
Entendendo o Modelo de Atores
Entendendo o Modelo de AtoresEntendendo o Modelo de Atores
Entendendo o Modelo de Atores
 
Minicurso - Web sites dinâmicos: PHP com orientação a objetos
Minicurso - Web sites dinâmicos: PHP com orientação a objetosMinicurso - Web sites dinâmicos: PHP com orientação a objetos
Minicurso - Web sites dinâmicos: PHP com orientação a objetos
 
Clean code
Clean codeClean code
Clean code
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
JS 101 - Introdução ao JavaScript
JS 101 - Introdução ao JavaScriptJS 101 - Introdução ao JavaScript
JS 101 - Introdução ao JavaScript
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 

Destaque

Programação ENAq
Programação ENAqProgramação ENAq
Programação ENAqSepror
 
1 morangos robertoshinyashiki
1 morangos robertoshinyashiki1 morangos robertoshinyashiki
1 morangos robertoshinyashikiAlberto Studart
 
10 mandamentos da_amizade
10 mandamentos da_amizade10 mandamentos da_amizade
10 mandamentos da_amizadeTauana Oliveira
 
Cover Letter-Muhammad Zahid
Cover Letter-Muhammad ZahidCover Letter-Muhammad Zahid
Cover Letter-Muhammad ZahidM zahid
 
Presentacion Viluz Blog
Presentacion Viluz BlogPresentacion Viluz Blog
Presentacion Viluz Blogguest57d6b709
 
CarnavalSalvadorItau
CarnavalSalvadorItauCarnavalSalvadorItau
CarnavalSalvadorItauAgência TUDO
 
Chaine de Rotissiers Dinner 17 Dec
Chaine de Rotissiers Dinner 17 DecChaine de Rotissiers Dinner 17 Dec
Chaine de Rotissiers Dinner 17 Decrobert knuckey
 
Nuevo brochure coema
Nuevo brochure coemaNuevo brochure coema
Nuevo brochure coemadj remi
 
trabajo_informatica
trabajo_informaticatrabajo_informatica
trabajo_informaticanel_apolo
 
Programación Festival De Cine en el Pabellón Cuba
Programación  Festival De Cine en el Pabellón CubaProgramación  Festival De Cine en el Pabellón Cuba
Programación Festival De Cine en el Pabellón CubaElaine Rodríguez
 
Carnavales Cristina Laxague
Carnavales Cristina LaxagueCarnavales Cristina Laxague
Carnavales Cristina LaxagueMaría Laxague
 
Presentacion ppt_modulo 7. Experto elearning
Presentacion ppt_modulo 7. Experto elearningPresentacion ppt_modulo 7. Experto elearning
Presentacion ppt_modulo 7. Experto elearningLeticia Vega
 

Destaque (20)

Rio gastronomia
Rio gastronomiaRio gastronomia
Rio gastronomia
 
Programação ENAq
Programação ENAqProgramação ENAq
Programação ENAq
 
1 morangos robertoshinyashiki
1 morangos robertoshinyashiki1 morangos robertoshinyashiki
1 morangos robertoshinyashiki
 
10 mandamentos da_amizade
10 mandamentos da_amizade10 mandamentos da_amizade
10 mandamentos da_amizade
 
Cover Letter-Muhammad Zahid
Cover Letter-Muhammad ZahidCover Letter-Muhammad Zahid
Cover Letter-Muhammad Zahid
 
Presentacion Viluz Blog
Presentacion Viluz BlogPresentacion Viluz Blog
Presentacion Viluz Blog
 
CarnavalSalvadorItau
CarnavalSalvadorItauCarnavalSalvadorItau
CarnavalSalvadorItau
 
Chaine de Rotissiers Dinner 17 Dec
Chaine de Rotissiers Dinner 17 DecChaine de Rotissiers Dinner 17 Dec
Chaine de Rotissiers Dinner 17 Dec
 
Nuevo brochure coema
Nuevo brochure coemaNuevo brochure coema
Nuevo brochure coema
 
Desocupado
DesocupadoDesocupado
Desocupado
 
3° significado de la mediación
3° significado de la mediación3° significado de la mediación
3° significado de la mediación
 
Diploma full
Diploma fullDiploma full
Diploma full
 
Nominexnetunoinc
NominexnetunoincNominexnetunoinc
Nominexnetunoinc
 
trabajo_informatica
trabajo_informaticatrabajo_informatica
trabajo_informatica
 
SEMA member
SEMA memberSEMA member
SEMA member
 
Gane Dinero En Internet
Gane Dinero En InternetGane Dinero En Internet
Gane Dinero En Internet
 
Programación Festival De Cine en el Pabellón Cuba
Programación  Festival De Cine en el Pabellón CubaProgramación  Festival De Cine en el Pabellón Cuba
Programación Festival De Cine en el Pabellón Cuba
 
Carnavales Cristina Laxague
Carnavales Cristina LaxagueCarnavales Cristina Laxague
Carnavales Cristina Laxague
 
CarnavalSalvadorA3
CarnavalSalvadorA3CarnavalSalvadorA3
CarnavalSalvadorA3
 
Presentacion ppt_modulo 7. Experto elearning
Presentacion ppt_modulo 7. Experto elearningPresentacion ppt_modulo 7. Experto elearning
Presentacion ppt_modulo 7. Experto elearning
 

Semelhante a Java Programação I

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeAdriano Tavares
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7David Willian
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
Mantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de TesteMantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de Testemauricioszabo
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangElaine Naomi
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixCris Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixCris Fidelix
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 

Semelhante a Java Programação I (20)

Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 
modulo1.pdf
modulo1.pdfmodulo1.pdf
modulo1.pdf
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Mantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de TesteMantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de Teste
 
Linguagem Java, fundamentos da linguagem Java
Linguagem Java, fundamentos da linguagem JavaLinguagem Java, fundamentos da linguagem Java
Linguagem Java, fundamentos da linguagem Java
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane Fidelix
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 

Mais de Oziel Moreira Neto

Usabilidade de Interfaces - Parte 3
Usabilidade de Interfaces - Parte 3Usabilidade de Interfaces - Parte 3
Usabilidade de Interfaces - Parte 3Oziel Moreira Neto
 
Usabilidade de Interfaces - Parte 2
Usabilidade de Interfaces - Parte 2Usabilidade de Interfaces - Parte 2
Usabilidade de Interfaces - Parte 2Oziel Moreira Neto
 
Usabilidade de Interfaces - Parte 1
Usabilidade de Interfaces - Parte 1Usabilidade de Interfaces - Parte 1
Usabilidade de Interfaces - Parte 1Oziel Moreira Neto
 
Introdução aos Métodos Ágeis - Parte II
Introdução aos Métodos Ágeis - Parte IIIntrodução aos Métodos Ágeis - Parte II
Introdução aos Métodos Ágeis - Parte IIOziel Moreira Neto
 
Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)
Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)
Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)Oziel Moreira Neto
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
A Evolução da Arquitetura de Sistemas Corporativos
A Evolução da Arquitetura de Sistemas CorporativosA Evolução da Arquitetura de Sistemas Corporativos
A Evolução da Arquitetura de Sistemas CorporativosOziel Moreira Neto
 
The Evolution Of Enterprise Application Architecture
The Evolution Of Enterprise Application ArchitectureThe Evolution Of Enterprise Application Architecture
The Evolution Of Enterprise Application ArchitectureOziel Moreira Neto
 

Mais de Oziel Moreira Neto (9)

Usabilidade de Interfaces - Parte 3
Usabilidade de Interfaces - Parte 3Usabilidade de Interfaces - Parte 3
Usabilidade de Interfaces - Parte 3
 
Usabilidade de Interfaces - Parte 2
Usabilidade de Interfaces - Parte 2Usabilidade de Interfaces - Parte 2
Usabilidade de Interfaces - Parte 2
 
Usabilidade de Interfaces - Parte 1
Usabilidade de Interfaces - Parte 1Usabilidade de Interfaces - Parte 1
Usabilidade de Interfaces - Parte 1
 
Introdução aos Métodos Ágeis - Parte II
Introdução aos Métodos Ágeis - Parte IIIntrodução aos Métodos Ágeis - Parte II
Introdução aos Métodos Ágeis - Parte II
 
Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)
Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)
Trabalhando com Centro de Custo e Receita no FIT Business Suite (ADempiere)
 
Gestão Empresarial Integrada
Gestão Empresarial IntegradaGestão Empresarial Integrada
Gestão Empresarial Integrada
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
A Evolução da Arquitetura de Sistemas Corporativos
A Evolução da Arquitetura de Sistemas CorporativosA Evolução da Arquitetura de Sistemas Corporativos
A Evolução da Arquitetura de Sistemas Corporativos
 
The Evolution Of Enterprise Application Architecture
The Evolution Of Enterprise Application ArchitectureThe Evolution Of Enterprise Application Architecture
The Evolution Of Enterprise Application Architecture
 

Java Programação I

  • 1. Linguagem de Programação I Análise e Desenvolvimento de Sistemas 2º Semestre Prof. Oziel Moreira Neto oziel.neto@gmail.com http://blog.oziel.com.br
  • 2. oziel moreira neto – oziel.neto@gmail.com 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
  • 4. oziel moreira neto – oziel.neto@gmail.com 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
  • 6. oziel moreira neto – oziel.neto@gmail.com 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
  • 7. oziel moreira neto – oziel.neto@gmail.com Conceitos Distribuições da Tecnologia Java Java ™ Java ™ Java ™ Standard Edition Enterprise Edition Micro Edition • Cliente/Servidor • eBusiness • Telefone celular • Applet • eCommerce • Dispositivos eletrônicos • Departamental • Corporativo • Móvel
  • 8. oziel moreira neto – oziel.neto@gmail.com Conceitos Tipos de programas Java • Stand-Alone • Java Applets™ • Java Servlets™ • Java Midlets™ • JavaBeans™
  • 9. oziel moreira neto – oziel.neto@gmail.com Conceitos “Key Features” da Tecnologia Java • Simples • Portável • Orientada a objetos • Interpretada • Distribuída • Alto desempenho • Robusta • Múltiplas linhas de • Segura execução • Neutra em relação à • Dinâmica Plataforma
  • 10. oziel moreira neto – oziel.neto@gmail.com 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
  • 11. oziel moreira neto – oziel.neto@gmail.com 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
  • 12. oziel moreira neto – oziel.neto@gmail.com Conceitos Entendendo a Plataforma Java • JVM – Java Virtual Machine Máquina Virtual Java JDK JRE • JRE – Java Runtime Environmnent Ambiente de execução de aplicativos Java JVM • JDK – Java Development Kit Ambiente de desenvolvimento Java Também chamado de J2SDK – Java 2 Software Development Kit
  • 13. oziel moreira neto – oziel.neto@gmail.com Conceitos Entendendo a Java Runtime Enviromnent bytecode Java Virtual Machine Sistema Operacional
  • 14. oziel moreira neto – oziel.neto@gmail.com Conceitos Entendendo a Portabilidade do Java
  • 15. oziel moreira neto – oziel.neto@gmail.com 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.
  • 16. oziel moreira neto – oziel.neto@gmail.com Conceitos Anatomia de uma Classe Java
  • 17. oziel moreira neto – oziel.neto@gmail.com 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
  • 18. oziel moreira neto – oziel.neto@gmail.com 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 ?:
  • 19. oziel moreira neto – oziel.neto@gmail.com Conceitos Operadores de bits Deslocamento a esquerda << Deslocamento a direita >> Deslocamento a direita (unsigned) >>> Inversão de bits ~ Resto da Divisão % Complemento (XOR) ^
  • 20. oziel moreira neto – oziel.neto@gmail.com Conceitos Operadores de Comparação Igualdade == Maioridade < Menoridade > Maior ou igual >= Menor ou igual <= Diferente !=
  • 21. oziel moreira neto – oziel.neto@gmail.com 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 }
  • 22. oziel moreira neto – oziel.neto@gmail.com 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 }
  • 23. oziel moreira neto – oziel.neto@gmail.com 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 );
  • 24. oziel moreira neto – oziel.neto@gmail.com 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. }
  • 25. oziel moreira neto – oziel.neto@gmail.com 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 }
  • 26. oziel moreira neto – oziel.neto@gmail.com Conceitos Controle de Fluxo Uso do continue for(int i = 0; i < 10; i++){ if (i == 5){ continue; } //.... }
  • 27. oziel moreira neto – oziel.neto@gmail.com Conceitos Controle de Fluxo Uso do break for(int i = 0; i < 10; i++){ if (i == 5){ break; } //.... }
  • 28. oziel moreira neto – oziel.neto@gmail.com 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; } //.... }
  • 29. oziel moreira neto – oziel.neto@gmail.com 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!
  • 30. oziel moreira neto – oziel.neto@gmail.com Conceitos • Encapsulamento Definimos uma interface de métodos pedido: Pedido públicos fornecendo acesso a informação do objeto - pedidoID: String - clienteID: String - notaFiscal:String - total: double Atributos privados - ICMS: double - produtos: List + adcionarProduto(Produto) + removerProduto(produtoID) + recuperaProduto(produtoID) Métodos públicos + calculaTotal(): double + calculaImpostos(): double + encerraPedido(): double + Pedido(pedidoID, clienteID)
  • 31. oziel moreira neto – oziel.neto@gmail.com Conceitos • Encapsulamento Dessa forma, podemos alterar o código dos métodos da classe Pedido sem pedido: Pedido alterar a classe Cliente. - pedidoID: String - clienteID: String não permitido - notaFiscal:String - total: double Atributos privados - ICMS: double - produtos: List Cliente + adcionarProduto(Produto) + removerProduto(produtoID) + recuperaProduto(produtoID) Métodos públicos + calculaTotal(): double permitido + calculaImpostos(): double + encerraPedido(): double + Pedido(pedidoID, clienteID)
  • 32. oziel moreira neto – oziel.neto@gmail.com 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?
  • 34. oziel moreira neto – oziel.neto@gmail.com Arrays Agenda – Java Arrays – Definindo Arrays – Cópia elementos – Manipulando elementos
  • 35. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com Arrays Java Arrays • Sintaxe tipo identificador[] = new tipo[tamanho]; • Exemplos int[] inteiros = new int[10]; String[] nomes = new String[10];
  • 37. oziel moreira neto – oziel.neto@gmail.com Arrays Java Arrays • Visualização Gráfica int[] inteiros = new int[10];
  • 38. oziel moreira neto – oziel.neto@gmail.com Arrays Java Arrays • Podem ter “n” dimensões formando matrizes int[][] dados = new int[10][10]; dados[0][0] = 100;
  • 39. oziel moreira neto – oziel.neto@gmail.com 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);
  • 40. oziel moreira neto – oziel.neto@gmail.com Arrays Copiando Elementos int original[] = { 1, 2, 3, 4, 5, 6 }; int copia[] = new int[10]; System.arraycopy(original, 0, copia, 0, original.length);
  • 41. oziel moreira neto – oziel.neto@gmail.com Arrays 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]+ " " ); }
  • 42. oziel moreira neto – oziel.neto@gmail.com 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?
  • 43. oziel moreira neto – oziel.neto@gmail.com Arrays Exercícios
  • 45. oziel moreira neto – oziel.neto@gmail.com 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
  • 46. oziel moreira neto – oziel.neto@gmail.com 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”.
  • 47. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Herança Pessoa A classe “cliente” é uma - nome: String - nascimento: Data subclasse da classe + getNome(): String “pessoa”, e herda todos os + getDate() :Date atributos e métodos da +Pessoa(nome) classe “pessoa”. Cliente é uma subclasse de Cliente Pessoa. - clienteID: String - CPF: String Pessoa é uma superclasse de + getClienteID(): String Cliente + getCPF() : String + Cliente(clienteID,CPF) Construtores não são herdados
  • 48. oziel moreira neto – oziel.neto@gmail.com 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.
  • 49. oziel moreira neto – oziel.neto@gmail.com 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 .
  • 50. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Representação na UML Define um modelo completo para solucionar um problema computacional.
  • 51. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Objetos a partir de subclasses Jose:Pessoa Pessoa nome = Jose Silva - nome: String nascimento: 10/01/1970 - nascimento: Data + getNome(): String + getDate() :Date +Pessoa(nome) Joao:Pessoa nome = Joao Souza nascimento: 10/10/1980 Instancias de Pessoa: Jose e Joao
  • 52. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Objetos a partir de subclasses Pessoa Mario:Cliente - nome: String - nascimento: Data nome = Mario Silva Souza + getNome(): String nascimento: 01/05/1970 + getDate() :Date clienteID = 0056 +Pessoa(nome) CPF: 12345678-00 Instancias de Cliente: Mario e Oscar Cliente Oscar:Cliente - clienteID: String - CPF: String nome = Oscar Souza + getClienteID(): String nascimento: 02/02/1987 + getCPF() : String clienteID = 0058 + Cliente(clienteID,CPF) CPF: 87654321-00
  • 53. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Codificando em Java • 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. public class Pessoa { // definição de classe } public class Cliente extends Pessoa { // definição de classe }
  • 54. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com 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.
  • 57. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Polimorfismo – Subclasses – Sobrescrita de método – Sobrecarga da método
  • 58. oziel moreira neto – oziel.neto@gmail.com 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.
  • 59. oziel moreira neto – oziel.neto@gmail.com 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
  • 60. oziel moreira neto – oziel.neto@gmail.com 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).
  • 61. oziel moreira neto – oziel.neto@gmail.com 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
  • 62. oziel moreira neto – oziel.neto@gmail.com 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.
  • 63. oziel moreira neto – oziel.neto@gmail.com 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;
  • 64. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Revisão
  • 65. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Uso de Classes e Métodos Abstratos (abstract) Abstract Classes: Não podem ser instanciadas, ou seja, é a primeira forma do objeto, e devem ser especializadas. public abstract class Produto extends Object { // metodo abstrato não possui corpo de implementacao. public abstract String getDescricaoCompleta(); }
  • 70. oziel moreira neto – oziel.neto@gmail.com 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.
  • 71. oziel moreira neto – oziel.neto@gmail.com 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. oziel moreira neto – oziel.neto@gmail.com 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]); }
  • 73. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Uso de Interfaces (interface) Usadas para definir apenas o nome de um comportamento, e não sua implementação! public interface Vendavel { public double getValorVenda(); } Uma classe, abstrata ou concreta, pode estender somente uma classe, mas pode implementar múltiplas interfaces.
  • 74. oziel moreira neto – oziel.neto@gmail.com 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.
  • 75. oziel moreira neto – oziel.neto@gmail.com 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.
  • 76. oziel moreira neto – oziel.neto@gmail.com 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
  • 77. oziel moreira neto – oziel.neto@gmail.com 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; } }
  • 78. oziel moreira neto – oziel.neto@gmail.com 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
  • 79. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Organizando as Classes em Pacotes (package) Codificação Nas classes de um pacote package loja; package loja; colocamos a definição de public class Carrinho { public class Catalogo { package .. .. } } import loja.*; Nas classes de outro pacote que necessitam usar as public class TestaProdutos { classes acima, usamos a .. definição de import }
  • 80. oziel moreira neto – oziel.neto@gmail.com 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?
  • 81. oziel moreira neto – oziel.neto@gmail.com Desenho Avançado de Classes Exercícios
  • 82. Manipulando Erros e Exceções
  • 83. oziel moreira neto – oziel.neto@gmail.com 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
  • 84. oziel moreira neto – oziel.neto@gmail.com 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
  • 85. oziel moreira neto – oziel.neto@gmail.com 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
  • 86. oziel moreira neto – oziel.neto@gmail.com Manipulando Erros e Exceções Hierarquia da exceções Todas as exceções e erros são subclasses de java.lang.Throwable
  • 87. oziel moreira neto – oziel.neto@gmail.com 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;
  • 88. oziel moreira neto – oziel.neto@gmail.com 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.
  • 89. oziel moreira neto – oziel.neto@gmail.com 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.
  • 90. oziel moreira neto – oziel.neto@gmail.com 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 }
  • 91. oziel moreira neto – oziel.neto@gmail.com Manipulando Erros e Exceções Estrutura try – catch - finally try { Se ocorrer uma IOException dentro do a.method(); bloco try, será executado o bloco A. b.method(); c.method(); Se ocorrer uma Exception que não é filha de IOException dentro do bloco try, } catch (IOException t) { será executado o bloco B. // A } catch (Exception t) { Se ocorrer um Error dentro do bloco try, // B será executado o bloco C. } catch (Throwable t) { // C Independente do que aconteça o bloco } finally { finally será executado. }
  • 92. oziel moreira neto – oziel.neto@gmail.com 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); } }
  • 93. oziel moreira neto – oziel.neto@gmail.com 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; } } } }
  • 94. oziel moreira neto – oziel.neto@gmail.com Manipulando Erros e Exceções Criando exceções Customizadas Dessa forma criamos uma exceção customizada!
  • 95. oziel moreira neto – oziel.neto@gmail.com Manipulando Erros e Exceções Criando exceções Customizadas public class SaldoInsuficienteException extends Exception { public SaldoInsuficienteException () { super("Falta de saldo para esta operação!"); } public SaldoInsuficienteException (String mensagem) { super(mensagem); } } Dessa forma criamos uma exceção customizada!
  • 96. oziel moreira neto – oziel.neto@gmail.com Manipulando Erros e Exceções Arremessando exceções Customizadas 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; } } } Dessa forma usamos uma exceção customizada!
  • 97. oziel moreira neto – oziel.neto@gmail.com 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() ); } } }
  • 98. oziel moreira neto – oziel.neto@gmail.com 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?
  • 99. oziel moreira neto – oziel.neto@gmail.com Manipulando Erros e Exceções Exercícios
  • 101. oziel moreira neto – oziel.neto@gmail.com 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
  • 102. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Principais API’s 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.
  • 103. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Principais API’s 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;
  • 104. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Parâmetros em linha de comando 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
  • 105. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Parâmetros em linha de comando 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] ); } } No método main, existe um array de String, args[], } que representa os parâmetros passados. # java TesteParametros parametro1 parametro2 “parametro 3”
  • 106. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Manipulando textos e cadeia de caracteres 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
  • 107. oziel moreira neto – oziel.neto@gmail.com 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! "); } } }
  • 108. oziel moreira neto – oziel.neto@gmail.com 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 ); } }
  • 109. oziel moreira neto – oziel.neto@gmail.com 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
  • 110. oziel moreira neto – oziel.neto@gmail.com 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.
  • 111. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Java Streamers – java.io.InputStream Streamers de entrada (do recurso para a aplicação)
  • 112. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Java Streamers – java.io.OutputStream Streamers de saída (da aplicação para o recurso)
  • 113. oziel moreira neto – oziel.neto@gmail.com 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.
  • 114. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Readers – java.io.Reader Readers (entrada de dados do recurso para a aplicação)
  • 115. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Writers – java.io.Writer Writers (saída de dados da aplicação para o recurso)
  • 116. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Categorias e uso
  • 117. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Categorias e uso
  • 118. oziel moreira neto – oziel.neto@gmail.com 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(); } } }
  • 119. oziel moreira neto – oziel.neto@gmail.com 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(); } } }
  • 120. oziel moreira neto – oziel.neto@gmail.com 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(); } } }
  • 121. oziel moreira neto – oziel.neto@gmail.com 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.
  • 122. oziel moreira neto – oziel.neto@gmail.com 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).
  • 123. oziel moreira neto – oziel.neto@gmail.com 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
  • 124. oziel moreira neto – oziel.neto@gmail.com 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 + "’"); } } }
  • 125. oziel moreira neto – oziel.neto@gmail.com 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 Arquivos de texto simples, onde do usuario=user lado esquerdo do igual temos a administrador=admin propriedade e do lado direito seu convidado=guest valor. #aplicacao.ini #arquivo de configuração diretorioTemp=c:/temp diretorioApp=d:/appl
  • 126. oziel moreira neto – oziel.neto@gmail.com 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 ); } }
  • 127. oziel moreira neto – oziel.neto@gmail.com 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 "); } } }
  • 128. oziel moreira neto – oziel.neto@gmail.com 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.
  • 129. oziel moreira neto – oziel.neto@gmail.com 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)
  • 130. oziel moreira neto – oziel.neto@gmail.com 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; } }
  • 131. oziel moreira neto – oziel.neto@gmail.com 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; } }
  • 132. oziel moreira neto – oziel.neto@gmail.com 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(); } } }
  • 133. oziel moreira neto – oziel.neto@gmail.com 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!
  • 134. oziel moreira neto – oziel.neto@gmail.com 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;
  • 135. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Coleções de Objetos – Java Collections™ 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;
  • 136. oziel moreira neto – oziel.neto@gmail.com 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();
  • 137. oziel moreira neto – oziel.neto@gmail.com 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; } }
  • 138. oziel moreira neto – oziel.neto@gmail.com 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?
  • 139. oziel moreira neto – oziel.neto@gmail.com 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;
  • 140. oziel moreira neto – oziel.neto@gmail.com 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();
  • 141. oziel moreira neto – oziel.neto@gmail.com 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?
  • 142. oziel moreira neto – oziel.neto@gmail.com Desenvolvimento de Aplicações em Java Exercícios
  • 143. Linguagem de Programação I Análise e Desenvolvimento de Sistemas 2º Semestre Prof. Oziel Moreira Neto oziel.neto@gmail.com http://blog.oziel.com.br