SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Construtores, mais sobre
métodos, APIs e bibliotecas
               Maurício Linhares
Variáveis estáticas
}    Variáveis estáticas são variáveis que pertencem a uma
      classe, em vez de a um objeto;

}    Não é necessário ter um objeto da classe para acessar
      uma variável estática dela, o acesso é feito através da
      própria classe;

}    Variáveis estáticas que não podem ser alteradas (estão
      marcadas como “final” funcionam como constantes em
      Java;
Exemplo de declaração de variável
estática
public class Statics {

    public static final float PI = 3.14F;

    public static SimpleDateFormat format =
       new SimpleDateFormat("dd/MM/yyyy");

}
Usando variáveis estáticas

public class ExemploDeStatics {

    public static void main(String[] args) {
       System.out.println( Statics.PI );
       Statics.PI = 3.12F; // ?
    }

}
Métodos estáticos
}    São os métodos que pertencem a uma classe e não a um
      objeto em específico;

}    Métodos estáticos são definidos através da adição do
      modificador “static” após a definição do nível de
      visibilidade do método;

}    Os métodos estáticos são invocados através do nome da
      classe aonde eles foram definidos, como por exemplo em
      “System.currentTimeInMilis()”;
Exemplo de método estático
public class Statics {

    public static SimpleDateFormat format =
       new SimpleDateFormat("dd/MM/yyyy");`

    public static void imprimirData( Date data ) {
       System.out.println( format.format( data ) );
    }

}
Usando um método estático
public class ExemploDeStatics {

    public static void main(String[] args) {

        System.out.println( Statics.PI );
        Statics.imprimirData( new Date() );

    }

}
Dando nomes aos bois (ou como
escrever código Java em Java)
}    Todos os nomes de métodos, variáveis de instância, locais
      ou estáticas devem ser escritos com a primeira letra em
      minúsculo, se o nome for composto por mais do que
      uma palavra, a primeira letra da nova palavra deve ser
      escrita com maiúsculo;

      }    String nome
      }    public void meuMetodo()
      }    boolean casoEncerrado

      }    int variavel_com_nome_bizarro
      }    String str_nome
Dando nomes aos bois
}    Constantes (variáveis static e final) devem ser escritas
      com o nome todo em maiúsculas e se o nome for
      formado por diversas palavras, cada palavra deve ser
      separada por um sublinhado ( “_” );

      }    public static final float PI
      }    public static final int DAY_OF_MONTH
      }    public static final int DAY_OF_YEAR
Dando nomes aos bois
}    Nomes de classes devem sempre começar com uma letra
      maiúscula e se eles forem compostos por mais do que
      uma palavra, a primeira letra de cada palavra também deve
      ser escrita em maiúsculo;

      }    String
      }    DateFormat
      }    LinkedHashSet
      }    CopyOnWriteArrayList
Operadores de comparação
}    São os operadores da linguagem que geram como
      resultado os valores TRUE ou FALSE;

}    Em Java existem diversos operadores que podem ser
      utilizados para comparações booleanas;

}    Todos esses operadores funcionam para referências e
      tipos primitivos, eles nem sempre funcionam da mesma
      forma para objetos;
Quais são os operadores de comparação?
}    ==
      }    Compara se dois primitivos são iguais ou se duas referências
            apontam para o mesmo objeto;
}    !=
      }    O contrário do operador ==
}    >, >=, < e <=
      }    Fazem a comparação de maior, maior ou igual, menor e menor
            ou igual, respectivamente, apenas para os tipos primitivos
            numéricos;
}    !
      }    Operador de negação, inverte qualquer resultado booleano;
Exemplo

System.out.println(    1 == 2   );
System.out.println(    'z' !=   'a' );
System.out.println(    8 > 10   );
System.out.println(    5 >= 5   );
System.out.println( “abc” == “bcd” );
Operadores booleanos
}    São operadores que funcionam apenas para comparar
      valores booleanos;

}    Eles são utilizados normalmente em operações
      condicionais (como ifs e whiles);

}    Existem em versões simples ( “|” e “&” ) e em versões
      curto-circuitadas ( “||” e “&&” );
Exemplo
String vazia = null;

if ( vazia != null && vazia.length() > 0 ) {
  System.out.println("A string não é
  vazia");
}

vazia = null;

if ( vazia != null & vazia.length() > 0 ) {
  System.out.println("A string não é
  vazia");
}
Qual a diferença entre os simples e os curto
circuitados?
}    Os operadores curto-circuitados podem parar uma
      comparação ainda na primeira avaliação:
      }    Se em um && o lado esquerdo for “false” toda a expressão
            torna-se falta automaticamente;
      }    Se em um || o lado esquerdo for “true”, toda a expressão
            torna-se verdadeira atomaticamente;


}    Os operadores que não são curto-circuitados sempre
      avaliam os dois lados da operação;
As coleções (ou como fazer um array que
aumenta e diminui)
}    As Coleções são estruturas de dados que podem ser
      utilizadas no lugar dos Arrays para guardar conjuntos de
      objetos;

}    Existem diversos tipos diferentes de colecões para os
      mais diversos tipos de necessidade, desde Listas (que
      funcionam como um array dinâmico) até conjuntos que
      nao permitem duplicatas;

}    Todas as coleções ficam dentro do pacote “java.util” e
      quase todas elas implementam a interface Collection;
Quais são os objetos que implementam as
listas?
}    java.util.ArrayList
      }    Objeto que implementa a lista através do uso de um Array
            interno (e invisível) para os seus usuários;


}    Java.util.LinkedList
      }    Objeto que implementa a lista na forma de uma lista encadeada
            (como uma fila de pessoas, primeiro a entrar, é o primeiro a
            sair)
Usando os objetos Lista
List<String> strings =
 new ArrayList<String>();
strings.add("Maurício");
strings.add("José");
strings.add("Carol");

System.out.println( strings );
Métodos comuns em objetos lista
}    add( int, Object)
      }    Adiciona um objeto no índice especificado
}    add( Object )
      }    Adiciona um objeto na última posição da lista
}    get( int )
      }    Pega o objeto que estiver na posição passada como parâmetro da
            lista
}    size()
      }    Diz a quantidade de itens que existem na lista
}    remove( Object )
      }    Remove o objeto passado como parâmetro da lista;
}    indexOf( Object )
      }    Diz o índice no qual o objeto passado como parâmetro se encontra,
            ou -1 se ele não estiver na lista;
Pausa para os comerciais
}    Se você comparar dois objetos usando o operador == a
      única coisa que você vai saber é se as duas referências
      apontam pro mesmo objeto, não se os objetos tem os
      mesmos atributos;

}    Cada objeto tem a sua própria lógica para definir quando
      é que ele é igual a um outro objeto qualquer;

}    Para definir qual é essa lógica de equivalência, os objetos
      em Java implementam o método equals();
Como implementar o método equals()?
}    Primeiro, definir quais as características definem um objeto
      como único:

}    Em um cliente, o CPF deve ser único, não pode haver mais do
      que um cliente com um CPF, outras características como o
      nome podem ser repetidas, mas você deve avaliar cada caso;

}    Métodos equals devem ser seguros quanto a passagem de
      valores nulos ou incorretos;

}    Ao implementar equals, você está definido as regras de
      equivalência entre dois objetos;
Exemplo de um método equals
public boolean equals(Object obj) {
  boolean result = false;

 if ( obj instanceof Cliente ) {
     Cliente cliente = (Cliente) obj;
     if ( this.cpf == null ) {
           result = cliente.cpf == null;
     }else {
           result = this.cpf.equals(cliente.cpf);
     }
 }

return result;
}
Algumas linhas especiais
}    if ( obj instanceof Cliente )

      }    O operador instanceof comapara se o objeto que está a
            esquerda é da classe ou de uma subclasse da classe (ou tipo)
            a direita;

      }    Ele retorna true se a comparação for verdadeira e false se
            ela não for verdadeira ou se o valor da referência for null;

      }    Nós usamos esse operador para ter certeza dos tipos com
            os quais estamos lidando;
Algumas linhas especiais
}    Cliente cliente = (Cliente) obj;

      }    O nome da classe entre parênteses “(Cliente)” denota uma
            operação chamada de “cast”;

      }    Um cast acontece quando você tem uma referência de uma classe
            mais genérica e quer colocar esse objeto em uma referência mais
            específica (como colocar um Object em um cliente);

      }    Se a operação de cast não for possível, uma exceção vai ser
            lançada quando o código estiver executando;

      }    Sempre proteja operações de cast com um instanceof quando
            você não tiver certeza do que está vindo;
Usando o nosso equals() em uma
coleção
Cliente cliente = new
 Cliente( "Maurício",
 "000.000.000-00" );
Cliente outroCliente = new
 Cliente( "José", "000.000.000-00" );

List<Cliente> clientes = new
 ArrayList<Cliente>();

clientes.add( cliente );

System.out.println( clientes.contains( o
 utroCliente ) );
Mas ainda não estamos terminados...
}    Além de implementar o método equals nos nossos
      objetos, também é necessário implementar o método
      hashCode();

}    O método hashCode serve para definir um identificador
      para os nossos objetos de forma que eles possam ser
      utilizados em tabelas de espalhamento (???);

}    A documentação do método hashCode diz que sempre
      que dois objetos são equals eles devem ter,
      obrigatoriamente, o mesmo hashCode, mas dois objetos
      que tem o mesmo hashCode não precisam ser equals;
Exemplo de uma implementação de
hashCode
public int hashCode() {
  return
     this.cpf == null ?
          super.hashCode() :
          this.cpf.hashCode();
}
Ainda sobre hashCodes
}    Normalmente não é necessário implementar o método
      hashCode diretamente, as classes base do Java já tem
      implementações que podem ser utilizadas;

}    Não implementar o método hashCode pode levar a
      problemas na hora de se utilizar coleções especiais como
      Maps (mapas) e Sets (conjuntos);
O laço for
}    Em java existem dois tipos de laço for, um especial para
      coleções e arrays (comumente referenciado como for-
      each) e o for comum vindo da linguagem c;

}    O for-each só é utilizado para navegar em uma coleção de
      objetos;

}    O for comum pode ser utilizado para qualquer caso de
      laço, mas ele deve ser utilizado apenas quando for um
      caso de “contagem” e não de condição, se o laço é apenas
      condicional, um while pode ser a melhor opção;
Exemplo de for-each
ArrayList<String> strings =
 new ArrayList<String>();
strings.add("Maurício");
strings.add("José");
strings.add("Carol");

for ( String nome : strings ) {
  System.out.println( nome );
}
                      Repete essa linha para cada
                           item na coleção
Exemplo de um for comum
ArrayList<String> strings = new ArrayList<String>();
strings.add("Maurício");
strings.add("José");
strings.add("Carol");

                     Condição          Incremento
 Inicialização


for ( int x = 0; x < strings.size(); x ++ ) {
  String nome = strings.get(x)
  System.out.println( nome );
}
Métodos construtores
}    São os métodos chamados para inicializar um objeto;

}    Sempre que há um ”new” há um método construtor
      sendo chamado;

}    Os métodos construtores são definidos com o mesmo
      nome da sua classe;

}    Uma classe pode ter diversos métodos construtores;
Exemplo de métodos construtores
public class Cliente {
   private String nome;
   private String cpf;
   private Date nascidoEm;

  public Cliente() {}

  public Cliente( String nome ) {
        this.nome = nome;
  }

  public Cliente( String nome, String cpf ) {
        this.nome = nome;
        this.cpf = cpf;
  }

  public Cliente( String nome, String cpf, Date nascidoEm ) {
        this.nome = nome;
        this.cpf = cpf;
        this.nascidoEm = nascidoEm;
  }
Exemplo de uso de construtores
Cliente umCliente = new Cliente();

Cliente outroCliente = new
 Cliente( "Maurício" );

Cliente cliente = new
 Cliente( "Maurício",
 "000.000.000-00" );

Cliente aindaCliente = new
 Cliente( "Maurício",
 "000.000.000-00", new Date() );
Informações especiais
}    Quando você não define um construtor na sua classe, o
      compilador adiciona um construtor default, que é o construtor
      sem parâmetros;

}    Se você definir um construtor qualquer na sua classe, o
      compilador não vai adicionar um construtor default, se você o
      quiser vai ter que adicioná-lo manualmente;

}    Os construtores tem níveis de visibilidade assim como
      métodos;

}    O construtor a ser chamado é selecionado pelos parâmetros
      que estão sendo passados;
Implementando um simples
         “Afunde um Político”
Um Batalha Naval aonde você afunda políticos, em vez de
                                               barcos J
Idéia básica
}    Você deve montar um quadro (ou matriz) com 8 linhas e
      8 colunas (veja que essa matriz não precisa existir de
      verdade…);

}    Os políticos devem ser espalhados nesse quadro, sempre
      na posição horizontal ou vertical (nunca em diagonal),
      ocupando 1 quadrado;

}    O programa deve receber uma entrada do cliente,
      pergutando em qual linha e em qual coluna ele deve
      tentar atirar;
Continuando…
}    Se o usuário acertar em um político, deve receber uma
      mensagem avisando do acerto e se o político afundou ou
      não (ele só afunda quando os 3 quadrados forem
      acertados);

}    Se o usuário não acetar, o programa deve também avisar
      que o tiro errou;

}    O programa não deve ficar todo em uma única classe J

Weitere ähnliche Inhalte

Was ist angesagt? (18)

Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Aula05
Aula05Aula05
Aula05
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe Vector
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Aula4
Aula4Aula4
Aula4
 
Java7
Java7Java7
Java7
 
POO - 23 - Coleções da API do Java
POO -  23 - Coleções da API do Java POO -  23 - Coleções da API do Java
POO - 23 - Coleções da API do Java
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
POO - 12 - A Classe Object
POO - 12 - A Classe ObjectPOO - 12 - A Classe Object
POO - 12 - A Classe Object
 
Java8
Java8Java8
Java8
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Java6
Java6Java6
Java6
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 

Andere mochten auch

Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Maurício Linhares
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMaurício Linhares
 
Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCOTIC-PROEG (UFPA)
 
Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Carlos Brando
 
Começando com Git
Começando com GitComeçando com Git
Começando com GitDaniel Costa
 

Andere mochten auch (8)

Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação Web
 
Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on rails
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
A Linguagem Ruby
A Linguagem RubyA Linguagem Ruby
A Linguagem Ruby
 
Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3
 
Começando com Git
Começando com GitComeçando com Git
Começando com Git
 

Ähnlich wie Curso java 04 - ap is e bibliotecas

Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doublePAULO Moreira
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Javadanrleywillian1
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaArthur Emanuel
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e ExercíciosArthur Emanuel
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Natanael Fonseca
 

Ähnlich wie Curso java 04 - ap is e bibliotecas (20)

String
StringString
String
 
Java 06 Strings Arrays
Java 06 Strings ArraysJava 06 Strings Arrays
Java 06 Strings Arrays
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Minicurso php
Minicurso phpMinicurso php
Minicurso php
 
Aula5
Aula5Aula5
Aula5
 
Java 05 Oo Basica
Java 05 Oo BasicaJava 05 Oo Basica
Java 05 Oo Basica
 
Aula4
Aula4Aula4
Aula4
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Java
 
Java 14
Java 14Java 14
Java 14
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de Java
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Repetições e vetores
Repetições e vetoresRepetições e vetores
Repetições e vetores
 
Resumão java
Resumão javaResumão java
Resumão java
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 

Mehr von Maurício Linhares

Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropMaurício Linhares
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMaurício Linhares
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemMaurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Maurício Linhares
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Maurício Linhares
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Maurício Linhares
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em redeMaurício Linhares
 
Relatório final do projeto de pesquisa e-Teacher
Relatório final do projeto de pesquisa e-TeacherRelatório final do projeto de pesquisa e-Teacher
Relatório final do projeto de pesquisa e-TeacherMaurício Linhares
 
Relatório Final - Biblioteca Digital Paulo Freire
Relatório Final - Biblioteca Digital Paulo FreireRelatório Final - Biblioteca Digital Paulo Freire
Relatório Final - Biblioteca Digital Paulo FreireMaurício Linhares
 

Mehr von Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
 
Extreme programming explicada
Extreme programming explicadaExtreme programming explicada
Extreme programming explicada
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Java wsdp
Java wsdpJava wsdp
Java wsdp
 
Relatório final do projeto de pesquisa e-Teacher
Relatório final do projeto de pesquisa e-TeacherRelatório final do projeto de pesquisa e-Teacher
Relatório final do projeto de pesquisa e-Teacher
 
Relatório Final - Biblioteca Digital Paulo Freire
Relatório Final - Biblioteca Digital Paulo FreireRelatório Final - Biblioteca Digital Paulo Freire
Relatório Final - Biblioteca Digital Paulo Freire
 
Apresentação sobre DB4O
Apresentação sobre DB4OApresentação sobre DB4O
Apresentação sobre DB4O
 

Curso java 04 - ap is e bibliotecas

  • 1. Construtores, mais sobre métodos, APIs e bibliotecas Maurício Linhares
  • 2. Variáveis estáticas }  Variáveis estáticas são variáveis que pertencem a uma classe, em vez de a um objeto; }  Não é necessário ter um objeto da classe para acessar uma variável estática dela, o acesso é feito através da própria classe; }  Variáveis estáticas que não podem ser alteradas (estão marcadas como “final” funcionam como constantes em Java;
  • 3. Exemplo de declaração de variável estática public class Statics { public static final float PI = 3.14F; public static SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); }
  • 4. Usando variáveis estáticas public class ExemploDeStatics { public static void main(String[] args) { System.out.println( Statics.PI ); Statics.PI = 3.12F; // ? } }
  • 5. Métodos estáticos }  São os métodos que pertencem a uma classe e não a um objeto em específico; }  Métodos estáticos são definidos através da adição do modificador “static” após a definição do nível de visibilidade do método; }  Os métodos estáticos são invocados através do nome da classe aonde eles foram definidos, como por exemplo em “System.currentTimeInMilis()”;
  • 6. Exemplo de método estático public class Statics { public static SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");` public static void imprimirData( Date data ) { System.out.println( format.format( data ) ); } }
  • 7. Usando um método estático public class ExemploDeStatics { public static void main(String[] args) { System.out.println( Statics.PI ); Statics.imprimirData( new Date() ); } }
  • 8. Dando nomes aos bois (ou como escrever código Java em Java) }  Todos os nomes de métodos, variáveis de instância, locais ou estáticas devem ser escritos com a primeira letra em minúsculo, se o nome for composto por mais do que uma palavra, a primeira letra da nova palavra deve ser escrita com maiúsculo; }  String nome }  public void meuMetodo() }  boolean casoEncerrado }  int variavel_com_nome_bizarro }  String str_nome
  • 9. Dando nomes aos bois }  Constantes (variáveis static e final) devem ser escritas com o nome todo em maiúsculas e se o nome for formado por diversas palavras, cada palavra deve ser separada por um sublinhado ( “_” ); }  public static final float PI }  public static final int DAY_OF_MONTH }  public static final int DAY_OF_YEAR
  • 10. Dando nomes aos bois }  Nomes de classes devem sempre começar com uma letra maiúscula e se eles forem compostos por mais do que uma palavra, a primeira letra de cada palavra também deve ser escrita em maiúsculo; }  String }  DateFormat }  LinkedHashSet }  CopyOnWriteArrayList
  • 11. Operadores de comparação }  São os operadores da linguagem que geram como resultado os valores TRUE ou FALSE; }  Em Java existem diversos operadores que podem ser utilizados para comparações booleanas; }  Todos esses operadores funcionam para referências e tipos primitivos, eles nem sempre funcionam da mesma forma para objetos;
  • 12. Quais são os operadores de comparação? }  == }  Compara se dois primitivos são iguais ou se duas referências apontam para o mesmo objeto; }  != }  O contrário do operador == }  >, >=, < e <= }  Fazem a comparação de maior, maior ou igual, menor e menor ou igual, respectivamente, apenas para os tipos primitivos numéricos; }  ! }  Operador de negação, inverte qualquer resultado booleano;
  • 13. Exemplo System.out.println( 1 == 2 ); System.out.println( 'z' != 'a' ); System.out.println( 8 > 10 ); System.out.println( 5 >= 5 ); System.out.println( “abc” == “bcd” );
  • 14. Operadores booleanos }  São operadores que funcionam apenas para comparar valores booleanos; }  Eles são utilizados normalmente em operações condicionais (como ifs e whiles); }  Existem em versões simples ( “|” e “&” ) e em versões curto-circuitadas ( “||” e “&&” );
  • 15. Exemplo String vazia = null; if ( vazia != null && vazia.length() > 0 ) { System.out.println("A string não é vazia"); } vazia = null; if ( vazia != null & vazia.length() > 0 ) { System.out.println("A string não é vazia"); }
  • 16. Qual a diferença entre os simples e os curto circuitados? }  Os operadores curto-circuitados podem parar uma comparação ainda na primeira avaliação: }  Se em um && o lado esquerdo for “false” toda a expressão torna-se falta automaticamente; }  Se em um || o lado esquerdo for “true”, toda a expressão torna-se verdadeira atomaticamente; }  Os operadores que não são curto-circuitados sempre avaliam os dois lados da operação;
  • 17. As coleções (ou como fazer um array que aumenta e diminui) }  As Coleções são estruturas de dados que podem ser utilizadas no lugar dos Arrays para guardar conjuntos de objetos; }  Existem diversos tipos diferentes de colecões para os mais diversos tipos de necessidade, desde Listas (que funcionam como um array dinâmico) até conjuntos que nao permitem duplicatas; }  Todas as coleções ficam dentro do pacote “java.util” e quase todas elas implementam a interface Collection;
  • 18. Quais são os objetos que implementam as listas? }  java.util.ArrayList }  Objeto que implementa a lista através do uso de um Array interno (e invisível) para os seus usuários; }  Java.util.LinkedList }  Objeto que implementa a lista na forma de uma lista encadeada (como uma fila de pessoas, primeiro a entrar, é o primeiro a sair)
  • 19. Usando os objetos Lista List<String> strings = new ArrayList<String>(); strings.add("Maurício"); strings.add("José"); strings.add("Carol"); System.out.println( strings );
  • 20. Métodos comuns em objetos lista }  add( int, Object) }  Adiciona um objeto no índice especificado }  add( Object ) }  Adiciona um objeto na última posição da lista }  get( int ) }  Pega o objeto que estiver na posição passada como parâmetro da lista }  size() }  Diz a quantidade de itens que existem na lista }  remove( Object ) }  Remove o objeto passado como parâmetro da lista; }  indexOf( Object ) }  Diz o índice no qual o objeto passado como parâmetro se encontra, ou -1 se ele não estiver na lista;
  • 21. Pausa para os comerciais }  Se você comparar dois objetos usando o operador == a única coisa que você vai saber é se as duas referências apontam pro mesmo objeto, não se os objetos tem os mesmos atributos; }  Cada objeto tem a sua própria lógica para definir quando é que ele é igual a um outro objeto qualquer; }  Para definir qual é essa lógica de equivalência, os objetos em Java implementam o método equals();
  • 22. Como implementar o método equals()? }  Primeiro, definir quais as características definem um objeto como único: }  Em um cliente, o CPF deve ser único, não pode haver mais do que um cliente com um CPF, outras características como o nome podem ser repetidas, mas você deve avaliar cada caso; }  Métodos equals devem ser seguros quanto a passagem de valores nulos ou incorretos; }  Ao implementar equals, você está definido as regras de equivalência entre dois objetos;
  • 23. Exemplo de um método equals public boolean equals(Object obj) { boolean result = false; if ( obj instanceof Cliente ) { Cliente cliente = (Cliente) obj; if ( this.cpf == null ) { result = cliente.cpf == null; }else { result = this.cpf.equals(cliente.cpf); } } return result; }
  • 24. Algumas linhas especiais }  if ( obj instanceof Cliente ) }  O operador instanceof comapara se o objeto que está a esquerda é da classe ou de uma subclasse da classe (ou tipo) a direita; }  Ele retorna true se a comparação for verdadeira e false se ela não for verdadeira ou se o valor da referência for null; }  Nós usamos esse operador para ter certeza dos tipos com os quais estamos lidando;
  • 25. Algumas linhas especiais }  Cliente cliente = (Cliente) obj; }  O nome da classe entre parênteses “(Cliente)” denota uma operação chamada de “cast”; }  Um cast acontece quando você tem uma referência de uma classe mais genérica e quer colocar esse objeto em uma referência mais específica (como colocar um Object em um cliente); }  Se a operação de cast não for possível, uma exceção vai ser lançada quando o código estiver executando; }  Sempre proteja operações de cast com um instanceof quando você não tiver certeza do que está vindo;
  • 26. Usando o nosso equals() em uma coleção Cliente cliente = new Cliente( "Maurício", "000.000.000-00" ); Cliente outroCliente = new Cliente( "José", "000.000.000-00" ); List<Cliente> clientes = new ArrayList<Cliente>(); clientes.add( cliente ); System.out.println( clientes.contains( o utroCliente ) );
  • 27. Mas ainda não estamos terminados... }  Além de implementar o método equals nos nossos objetos, também é necessário implementar o método hashCode(); }  O método hashCode serve para definir um identificador para os nossos objetos de forma que eles possam ser utilizados em tabelas de espalhamento (???); }  A documentação do método hashCode diz que sempre que dois objetos são equals eles devem ter, obrigatoriamente, o mesmo hashCode, mas dois objetos que tem o mesmo hashCode não precisam ser equals;
  • 28. Exemplo de uma implementação de hashCode public int hashCode() { return this.cpf == null ? super.hashCode() : this.cpf.hashCode(); }
  • 29. Ainda sobre hashCodes }  Normalmente não é necessário implementar o método hashCode diretamente, as classes base do Java já tem implementações que podem ser utilizadas; }  Não implementar o método hashCode pode levar a problemas na hora de se utilizar coleções especiais como Maps (mapas) e Sets (conjuntos);
  • 30. O laço for }  Em java existem dois tipos de laço for, um especial para coleções e arrays (comumente referenciado como for- each) e o for comum vindo da linguagem c; }  O for-each só é utilizado para navegar em uma coleção de objetos; }  O for comum pode ser utilizado para qualquer caso de laço, mas ele deve ser utilizado apenas quando for um caso de “contagem” e não de condição, se o laço é apenas condicional, um while pode ser a melhor opção;
  • 31. Exemplo de for-each ArrayList<String> strings = new ArrayList<String>(); strings.add("Maurício"); strings.add("José"); strings.add("Carol"); for ( String nome : strings ) { System.out.println( nome ); } Repete essa linha para cada item na coleção
  • 32. Exemplo de um for comum ArrayList<String> strings = new ArrayList<String>(); strings.add("Maurício"); strings.add("José"); strings.add("Carol"); Condição Incremento Inicialização for ( int x = 0; x < strings.size(); x ++ ) { String nome = strings.get(x) System.out.println( nome ); }
  • 33. Métodos construtores }  São os métodos chamados para inicializar um objeto; }  Sempre que há um ”new” há um método construtor sendo chamado; }  Os métodos construtores são definidos com o mesmo nome da sua classe; }  Uma classe pode ter diversos métodos construtores;
  • 34. Exemplo de métodos construtores public class Cliente { private String nome; private String cpf; private Date nascidoEm; public Cliente() {} public Cliente( String nome ) { this.nome = nome; } public Cliente( String nome, String cpf ) { this.nome = nome; this.cpf = cpf; } public Cliente( String nome, String cpf, Date nascidoEm ) { this.nome = nome; this.cpf = cpf; this.nascidoEm = nascidoEm; }
  • 35. Exemplo de uso de construtores Cliente umCliente = new Cliente(); Cliente outroCliente = new Cliente( "Maurício" ); Cliente cliente = new Cliente( "Maurício", "000.000.000-00" ); Cliente aindaCliente = new Cliente( "Maurício", "000.000.000-00", new Date() );
  • 36. Informações especiais }  Quando você não define um construtor na sua classe, o compilador adiciona um construtor default, que é o construtor sem parâmetros; }  Se você definir um construtor qualquer na sua classe, o compilador não vai adicionar um construtor default, se você o quiser vai ter que adicioná-lo manualmente; }  Os construtores tem níveis de visibilidade assim como métodos; }  O construtor a ser chamado é selecionado pelos parâmetros que estão sendo passados;
  • 37. Implementando um simples “Afunde um Político” Um Batalha Naval aonde você afunda políticos, em vez de barcos J
  • 38. Idéia básica }  Você deve montar um quadro (ou matriz) com 8 linhas e 8 colunas (veja que essa matriz não precisa existir de verdade…); }  Os políticos devem ser espalhados nesse quadro, sempre na posição horizontal ou vertical (nunca em diagonal), ocupando 1 quadrado; }  O programa deve receber uma entrada do cliente, pergutando em qual linha e em qual coluna ele deve tentar atirar;
  • 39. Continuando… }  Se o usuário acertar em um político, deve receber uma mensagem avisando do acerto e se o político afundou ou não (ele só afunda quando os 3 quadrados forem acertados); }  Se o usuário não acetar, o programa deve também avisar que o tiro errou; }  O programa não deve ficar todo em uma única classe J