SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Métodos e
variáveis de
instância
Maurício Linhares – mauricio.linhares@gmail.com
Visibilidade, pacotes e
“importando” objetos
•  Todas as classes Java vivem dentro de “pacotes” (o diretório
   aonde elas se econtram);

•  Dividir as classes em pacotes é necessário para organizar o
   código, assim, classes relacionadas ficam juntas, nas mesmas
   pastas;

•  O pacote aonde a classe está é definido pela palavra reservada
   “package” , que aparece no início de um arquivo .java;

•  O nome do pacote sempre fica fora da definição de classe;
Exemplo de definiçao de
pacote
package locadora.cadastro;

import java.util.List;

import locadora.util.Paginador;

public class CadastroDeClientes {
  //métodos e atributos…
}
Packages
•  O “package locadora.cadastro” avisa que essa classe
   pertence ao pacote locadora.cadastro e que deve estar
   dentro da pasta “locadora/cadastro”;

•  O ponto (“.”) no nome de um pacote avisa a definição
   de uma pasta, então cada nome separado por ponto
   simboliza uma pasta no sistema de arquivos do sistema
   operacional, o arquivo .java que referencia o pacote
   sempre deve estar na última pasta do pacote;

•  A definição de pacotes não é obrigatória, quando eles
   não são definidos, o compilador assume que o pacote é o
   diretório atual;
Importando código
•  Uma classe não pode acessar classes fora do seu pacote, a não
   ser que a classe do outro pacote esteja visível (pública) e que
   a classe que a deseja usar faça a importação dessa classe;

•  Para importar uma classe é necessário utilizar a palavra
   reservada “import” seguida do nome completo da classe (o
   nome do pacote junto do nome da classe, como em
   java.util.Date);

•  Depois de importada, a classe externa pode ser utilizada
   normalmente.
Exemplo do uso de
imports
import java.util.Random;

public class Sorteador {

    public static void main(String[]
    args) {
       Random random = new Random();
       System.out.println(
            random.nextInt(7) + 1 );
    }

}
Níveis de visibilidade em
Java
•  private – apenas quem estiver na mesma classe pode ver;

•  protected – apenas quem estiver no mesmo pacote ou em
   subclasses pode ver;

•  default (sem definição) – apenas quem estiver no mesmo
   pacote pode ver;

•  public – todos podem ver;
Invocando métodos
•  Para se invocar um método, nós utilizamos o operador
   “.” (ponto);

•  É possível passar informações para os métodos através dos
   parâmetros, mas a definição de parâmetros não é obrigatória;

•  Métodos podem ou não retornar valores;
Exemplo de definição de
métodos
public class Cachorro {

    public void latir() {
       System.out.println("Huf! Huf!");
    }

    public boolean comFome() {
       return true;
    }

}	
  
Métodos que acessam variáveis de instância
public class Conta extends Object {

        public int numero;
        private double saldo;

        public void depositar( double valor ) {
              this.saldo = this.saldo + valor;
        }

        public boolean sacar( double valor ) {
              boolean efetuado = false;
              if ( this.saldo >= valor ) {
                      this.saldo = this.saldo - valor;
                      efetuado = true;
              }
              return efetuado;
        }

}	
  
Usando o objeto Conta
Conta minhaConta = new Conta();
Conta suaConta = new Conta();

minhaConta.depositar(400);
suaConta.depositar( 1000 );

suaConta.sacar(200);
minhaConta.depositar(200);
Anatomia da chamada
       suaConta.sacar(200);
	
  




       public boolean sacar( double valor ) {
              boolean efetuado = false;
              if ( this.saldo >= valor ) {
                     this.saldo = this.saldo - valor;
                     efetuado = true;
              }
              return efetuado;
       }
Em java tudo se passa por
cópia…
•  Todos os parâmetros são passados por cópia de valor;

•  Para primitivos, o que é copiado é o valor do primitivo;

•  Para objetos, o que é copiado é a referêcia;
Passagem de primitivos
public void testeDeCopiaDeParametros() {
     int x = 9;
     int y = 5;

     System.out.println(soma( x, y ));
     System.out.println(x);
}

public int soma( int primeiro, int
      segundo ) {
          primeiro = segundo;
          return primeiro + segundo;
}	
  
Teste de passagem de
objetos
public void testeDePassagemDeObjetos() {
  Conta conta = new Conta(300);
  Conta outraConta = new Conta(400);
  transferir( conta, outraConta, 200);
}

public void transferir( Conta origem,
      Conta destino, double valor ) {
      origem = new Conta(500);
      origem.sacar( valor );
      destino.depositar(valor);
}	
  
Dissecando o código

   Referência	
  1	
  	
     Conta	
  1	
  
      conta	
  
   Referência	
  2	
  
   outraConta	
  



                             Conta	
  2	
  
    Referência	
  3	
  
      origem	
  
    Referência	
  4	
  
      des7no	
  
Voltando a orientação a
objetos
•  Isso não é uma boa idéia:
  •  conta.numero = 2;


•  Qualquer um pode alterar o valor do meu objeto;

•  Se um dia eu precisar mudar o jeito de se colocar o número
   numa conta, vou quebrar todo o código;

•  Não existe nenhuma validação para o que está sendo passado;
Então lá vem o
encapsulamento
•  As informações de um objeto devem ser “escondidas” dos
   agentes externos;

•  Ninguém deve ter acesso direto as variáveis de instância de
   um objeto;

•  O objeto deve definir métodos para que seja possível alterar o
   seu estado de forma segura e considerando as suas invariantes
   (o seu estado correto);
Jeito	
  simples	
  de	
  se	
  implementar	
  o	
  
encapsulamento	
  em	
  Java	
  
•  Coloque todas as variáveis de instância como sendo
   private;

•  Crie métodos para alterar e/ou ler o valor dessas
   variáveis;

•  Apenas as variáveis que REALMENTE precisam ser
   acessadas por objetos externos devem ter métodos para
   acesso e alteração, NÃO crie métodos de acesso e
   alteração pra todo mundo;

•  Cada par de métodos get/set determina uma
   “propriedade virtual” do seu objeto, ele não precisa ter
   essa propridade como variável de instância;
Em java…
}  Os	
  métodos	
  de	
  acesso	
  são	
  chamados	
  “ge=ers”	
  ou	
  “accessors”	
  (os	
  
    pegadores):	
  


   public double getSaldo() {
     return this.saldo;
   }

}  Os	
  métodos	
  de	
  alteração	
  são	
  chamados	
  de	
  “se=ers”	
  ou	
  
    “mutators”	
  (os	
  colocadores):	
  


   public void setSaldo( double saldo ) {
         this.saldo = saldo;
   }	
  
Por que fazer isso?
•  Quando você usa os gets e sets você está escondendo o
   funcionamento da sua classe de quem a usa;

•  Escondendo as variáveis que a sua classe tem através de
   métodos torna possível que você possa alterar a
   implementação do seu objeto sem que as pessoas e o código
   que o usam percebam;

•  Você pode adicionar regras de validação ou transformação nos
   métodos para evitar que o usuário envie informações erradas;
Um exemplo….
•  Usar datas em Java é um martírio, as classes Date e Calendar
   são tristes;

•  Na classe calendar, alguém teve a brilhante idéia de colocar os
   meses começando do 0 em vez do 1, então dezembro é o mês
   11;

•  Não existe um meio simples e direto de se trabalhar com
   Java…
Até surgir a nossa classe
  Data!
public class Data {
  private GregorianCalendar calendar = new GregorianCalendar();

        public int getDia() {
              return this.calendar.get( Calendar.DAY_OF_MONTH );
        }

        public void setDia( int diaDoMes ) {
              this.calendar.set( Calendar.DAY_OF_MONTH , diaDoMes);
        }

        public void setMes( int mes ) {
              if ( mes >= 1 && mes <= 12 ) {
                      this.calendar.set( Calendar.MONTH , mes - 1);
              }
        }

        public int getMes() {
              return this.calendar.get( Calendar.MONTH ) + 1;
        }
}	
  
O que é que nós temos?
•  Um objeto com uma única variável de instância, mas com três
   propriedades (o ano não aparece no slide);

•  Na propriedade “mes” nós estamos fazendo uma
   transformação para que os meses sejam contados
   corretamente, de 1 a 12;

•  Ainda na propriedade “mes” nós estamos fazendo uma
   validação quando só aceitamos meses de 1 a 12;
Caso especial dos gets/
sets
•  Para variáveis booleanas o método get vira um método
   “is”:

public class Cliente {

    boolean pagador;

    public boolean isPagador() {
       return pagador;
    }
}
Variáveis de instância e
inicialização
•  As variáveis de instância são inicializadas com um valor padrão
   se você não der nenhum valor a elas;


  •  Numeros são inicializados com 0
  •  Booleans são inicializados com “false”
  •  Referências para objetos são inicializados com “null”
Exemplo…
public class Cliente {

        int numero;
        boolean pagador;
        String nome;

        public static void main(String[] args) {
            Cliente cliente = new Cliente();
            System.out.println( cliente.numero );
            System.out.println( cliente.pagador );
            System.out.println( cliente.nome );
        }

}	
  
Mas e as variáveis locais?
•  Variáveis locais são aquelas que são definidas dentro de um
   método;

•  Variáveis locais não tem valores de inicialização padrão, você
   precisa definir explicitamente o valor delas;

•  Se você não definir explicitamente o valor, a variável não vai
   poder ser utilizada;
Exemplo de variáveis
locais
public static void main(String[]
  args) {
  int x;
  System.out.println( x ); //erro
  de compilação
  int z = 20;
  System.out.println(z);
}
Exercício	
  -­‐	
  1	
  
•  Implemente	
  um	
  objeto	
  pessoa	
  que	
  tenha	
  nome	
  e	
  data	
  de	
  
   nascimento	
  como	
  propriedades	
  e	
  um	
  método	
  getIdade()	
  que	
  
   retorne	
  a	
  idade	
  atual	
  da	
  pessoa	
  através	
  do	
  cálculo	
  da	
  data	
  de	
  
   nascimento	
  pela	
  data	
  atual.	
  
    •  Dicas:	
  
         •  Lembre-­‐se	
  que	
  a	
  data	
  de	
  nascimento	
  pode	
  ser	
  antes	
  ou	
  depois	
  da	
  
            data	
  atual	
  no	
  ano	
  atual,	
  então	
  subs7tuir	
  os	
  anos	
  não	
  funciona;	
  
         •  Cálculos	
  de	
  dadas	
  em	
  Java	
  são	
  sempre	
  feitos	
  através	
  da	
  classe	
  
            java.u7l.Calendar	
  
Exercício - 2
•  O sistema deve definir duas contas bancárias;

•  O sistema deve fornecer ao usuário na linha de comando as
   opções de depositar ou sacar das contas, além de transferir
   dinheiro entre as duas;

•  O sistema deve avisar ao usuário quando ele tentar sacar ou
   transferir mais dinheiro do que há na conta;

•  O sistema deve ter uma opçao para “fechar” (o usuário não
   deve fechar o sistema “no braço”);
Dicas de implementação
•  Um switch pode ser uma boa escolha para definir o que o
   cliente quer fazer;

•  Todos os dados das contas devem ficar nos seus respectivos
   objetos conta;

•  Scanners são a forma mais fácil de ler da linha de comando;

Mais conteúdo relacionado

Mais procurados

Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controleProfessor Samuel Ribeiro
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Collections Api - Java
Collections Api - JavaCollections Api - Java
Collections Api - JavaDrishti Bhalla
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributosLoiane Groner
 

Mais procurados (20)

Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Java Lista Exercicios 03
Java Lista Exercicios 03Java Lista Exercicios 03
Java Lista Exercicios 03
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controle
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Collections Api - Java
Collections Api - JavaCollections Api - Java
Collections Api - Java
 
JAVA OOP
JAVA OOPJAVA OOP
JAVA OOP
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Algoritmos: Tipos de Dados
Algoritmos: Tipos de DadosAlgoritmos: Tipos de Dados
Algoritmos: Tipos de Dados
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
 
Introdução a React Native
Introdução a React NativeIntrodução a React Native
Introdução a React Native
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 

Destaque

Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parecejesuinoPower
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8Eder Magalhães
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
[Curso Java Basico] Exercicios Aulas 14 15
[Curso Java Basico] Exercicios Aulas 14 15[Curso Java Basico] Exercicios Aulas 14 15
[Curso Java Basico] Exercicios Aulas 14 15Loiane Groner
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E ClassesCursoSENAC
 
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
[Curso Java Basico] Aula 15: Controle de Decisao Switch-CaseLoiane Groner
 
Aula 8 - Lógica de Programação - Variáveis, Tipos de dados e Operadores
Aula 8 - Lógica de Programação - Variáveis, Tipos de dados e OperadoresAula 8 - Lógica de Programação - Variáveis, Tipos de dados e Operadores
Aula 8 - Lógica de Programação - Variáveis, Tipos de dados e OperadoresAndré Constantino da Silva
 
#4 Startup Braga / FLAD Acceleration Program
#4 Startup Braga / FLAD Acceleration Program#4 Startup Braga / FLAD Acceleration Program
#4 Startup Braga / FLAD Acceleration ProgramStartup Braga
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 

Destaque (10)

JAVA - Pacotes
JAVA - PacotesJAVA - Pacotes
JAVA - Pacotes
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
[Curso Java Basico] Exercicios Aulas 14 15
[Curso Java Basico] Exercicios Aulas 14 15[Curso Java Basico] Exercicios Aulas 14 15
[Curso Java Basico] Exercicios Aulas 14 15
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E Classes
 
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
 
Aula 8 - Lógica de Programação - Variáveis, Tipos de dados e Operadores
Aula 8 - Lógica de Programação - Variáveis, Tipos de dados e OperadoresAula 8 - Lógica de Programação - Variáveis, Tipos de dados e Operadores
Aula 8 - Lógica de Programação - Variáveis, Tipos de dados e Operadores
 
#4 Startup Braga / FLAD Acceleration Program
#4 Startup Braga / FLAD Acceleration Program#4 Startup Braga / FLAD Acceleration Program
#4 Startup Braga / FLAD Acceleration Program
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 

Semelhante a Curso java 03 - métodos e parâmetros

Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
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
 
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
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
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
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetosMateus Parente
 
AULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptAULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptJoberthSilva
 
AULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.pptAULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.pptJoberthSilva
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2irenescotolo
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)Carlos Santos
 

Semelhante a Curso java 03 - métodos e parâmetros (20)

Java 05 Oo Basica
Java 05 Oo BasicaJava 05 Oo Basica
Java 05 Oo Basica
 
Aula4
Aula4Aula4
Aula4
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Aula5
Aula5Aula5
Aula5
 
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
 
Refactoring
RefactoringRefactoring
Refactoring
 
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
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
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
 
POO.pdf
POO.pdfPOO.pdf
POO.pdf
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
AULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptAULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.ppt
 
AULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.pptAULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.ppt
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)
 

Mais de 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
 
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
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
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 abstratosMaurício Linhares
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurí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
 

Mais de 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
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
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
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
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 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
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
 

Curso java 03 - métodos e parâmetros

  • 1. Métodos e variáveis de instância Maurício Linhares – mauricio.linhares@gmail.com
  • 2. Visibilidade, pacotes e “importando” objetos •  Todas as classes Java vivem dentro de “pacotes” (o diretório aonde elas se econtram); •  Dividir as classes em pacotes é necessário para organizar o código, assim, classes relacionadas ficam juntas, nas mesmas pastas; •  O pacote aonde a classe está é definido pela palavra reservada “package” , que aparece no início de um arquivo .java; •  O nome do pacote sempre fica fora da definição de classe;
  • 3. Exemplo de definiçao de pacote package locadora.cadastro; import java.util.List; import locadora.util.Paginador; public class CadastroDeClientes { //métodos e atributos… }
  • 4. Packages •  O “package locadora.cadastro” avisa que essa classe pertence ao pacote locadora.cadastro e que deve estar dentro da pasta “locadora/cadastro”; •  O ponto (“.”) no nome de um pacote avisa a definição de uma pasta, então cada nome separado por ponto simboliza uma pasta no sistema de arquivos do sistema operacional, o arquivo .java que referencia o pacote sempre deve estar na última pasta do pacote; •  A definição de pacotes não é obrigatória, quando eles não são definidos, o compilador assume que o pacote é o diretório atual;
  • 5. Importando código •  Uma classe não pode acessar classes fora do seu pacote, a não ser que a classe do outro pacote esteja visível (pública) e que a classe que a deseja usar faça a importação dessa classe; •  Para importar uma classe é necessário utilizar a palavra reservada “import” seguida do nome completo da classe (o nome do pacote junto do nome da classe, como em java.util.Date); •  Depois de importada, a classe externa pode ser utilizada normalmente.
  • 6. Exemplo do uso de imports import java.util.Random; public class Sorteador { public static void main(String[] args) { Random random = new Random(); System.out.println( random.nextInt(7) + 1 ); } }
  • 7. Níveis de visibilidade em Java •  private – apenas quem estiver na mesma classe pode ver; •  protected – apenas quem estiver no mesmo pacote ou em subclasses pode ver; •  default (sem definição) – apenas quem estiver no mesmo pacote pode ver; •  public – todos podem ver;
  • 8. Invocando métodos •  Para se invocar um método, nós utilizamos o operador “.” (ponto); •  É possível passar informações para os métodos através dos parâmetros, mas a definição de parâmetros não é obrigatória; •  Métodos podem ou não retornar valores;
  • 9. Exemplo de definição de métodos public class Cachorro { public void latir() { System.out.println("Huf! Huf!"); } public boolean comFome() { return true; } }  
  • 10. Métodos que acessam variáveis de instância public class Conta extends Object { public int numero; private double saldo; public void depositar( double valor ) { this.saldo = this.saldo + valor; } public boolean sacar( double valor ) { boolean efetuado = false; if ( this.saldo >= valor ) { this.saldo = this.saldo - valor; efetuado = true; } return efetuado; } }  
  • 11. Usando o objeto Conta Conta minhaConta = new Conta(); Conta suaConta = new Conta(); minhaConta.depositar(400); suaConta.depositar( 1000 ); suaConta.sacar(200); minhaConta.depositar(200);
  • 12. Anatomia da chamada suaConta.sacar(200);   public boolean sacar( double valor ) { boolean efetuado = false; if ( this.saldo >= valor ) { this.saldo = this.saldo - valor; efetuado = true; } return efetuado; }
  • 13. Em java tudo se passa por cópia… •  Todos os parâmetros são passados por cópia de valor; •  Para primitivos, o que é copiado é o valor do primitivo; •  Para objetos, o que é copiado é a referêcia;
  • 14. Passagem de primitivos public void testeDeCopiaDeParametros() { int x = 9; int y = 5; System.out.println(soma( x, y )); System.out.println(x); } public int soma( int primeiro, int segundo ) { primeiro = segundo; return primeiro + segundo; }  
  • 15. Teste de passagem de objetos public void testeDePassagemDeObjetos() { Conta conta = new Conta(300); Conta outraConta = new Conta(400); transferir( conta, outraConta, 200); } public void transferir( Conta origem, Conta destino, double valor ) { origem = new Conta(500); origem.sacar( valor ); destino.depositar(valor); }  
  • 16. Dissecando o código Referência  1     Conta  1   conta   Referência  2   outraConta   Conta  2   Referência  3   origem   Referência  4   des7no  
  • 17. Voltando a orientação a objetos •  Isso não é uma boa idéia: •  conta.numero = 2; •  Qualquer um pode alterar o valor do meu objeto; •  Se um dia eu precisar mudar o jeito de se colocar o número numa conta, vou quebrar todo o código; •  Não existe nenhuma validação para o que está sendo passado;
  • 18. Então lá vem o encapsulamento •  As informações de um objeto devem ser “escondidas” dos agentes externos; •  Ninguém deve ter acesso direto as variáveis de instância de um objeto; •  O objeto deve definir métodos para que seja possível alterar o seu estado de forma segura e considerando as suas invariantes (o seu estado correto);
  • 19. Jeito  simples  de  se  implementar  o   encapsulamento  em  Java   •  Coloque todas as variáveis de instância como sendo private; •  Crie métodos para alterar e/ou ler o valor dessas variáveis; •  Apenas as variáveis que REALMENTE precisam ser acessadas por objetos externos devem ter métodos para acesso e alteração, NÃO crie métodos de acesso e alteração pra todo mundo; •  Cada par de métodos get/set determina uma “propriedade virtual” do seu objeto, ele não precisa ter essa propridade como variável de instância;
  • 20. Em java… }  Os  métodos  de  acesso  são  chamados  “ge=ers”  ou  “accessors”  (os   pegadores):   public double getSaldo() { return this.saldo; } }  Os  métodos  de  alteração  são  chamados  de  “se=ers”  ou   “mutators”  (os  colocadores):   public void setSaldo( double saldo ) { this.saldo = saldo; }  
  • 21. Por que fazer isso? •  Quando você usa os gets e sets você está escondendo o funcionamento da sua classe de quem a usa; •  Escondendo as variáveis que a sua classe tem através de métodos torna possível que você possa alterar a implementação do seu objeto sem que as pessoas e o código que o usam percebam; •  Você pode adicionar regras de validação ou transformação nos métodos para evitar que o usuário envie informações erradas;
  • 22. Um exemplo…. •  Usar datas em Java é um martírio, as classes Date e Calendar são tristes; •  Na classe calendar, alguém teve a brilhante idéia de colocar os meses começando do 0 em vez do 1, então dezembro é o mês 11; •  Não existe um meio simples e direto de se trabalhar com Java…
  • 23. Até surgir a nossa classe Data! public class Data { private GregorianCalendar calendar = new GregorianCalendar(); public int getDia() { return this.calendar.get( Calendar.DAY_OF_MONTH ); } public void setDia( int diaDoMes ) { this.calendar.set( Calendar.DAY_OF_MONTH , diaDoMes); } public void setMes( int mes ) { if ( mes >= 1 && mes <= 12 ) { this.calendar.set( Calendar.MONTH , mes - 1); } } public int getMes() { return this.calendar.get( Calendar.MONTH ) + 1; } }  
  • 24. O que é que nós temos? •  Um objeto com uma única variável de instância, mas com três propriedades (o ano não aparece no slide); •  Na propriedade “mes” nós estamos fazendo uma transformação para que os meses sejam contados corretamente, de 1 a 12; •  Ainda na propriedade “mes” nós estamos fazendo uma validação quando só aceitamos meses de 1 a 12;
  • 25. Caso especial dos gets/ sets •  Para variáveis booleanas o método get vira um método “is”: public class Cliente { boolean pagador; public boolean isPagador() { return pagador; } }
  • 26. Variáveis de instância e inicialização •  As variáveis de instância são inicializadas com um valor padrão se você não der nenhum valor a elas; •  Numeros são inicializados com 0 •  Booleans são inicializados com “false” •  Referências para objetos são inicializados com “null”
  • 27. Exemplo… public class Cliente { int numero; boolean pagador; String nome; public static void main(String[] args) { Cliente cliente = new Cliente(); System.out.println( cliente.numero ); System.out.println( cliente.pagador ); System.out.println( cliente.nome ); } }  
  • 28. Mas e as variáveis locais? •  Variáveis locais são aquelas que são definidas dentro de um método; •  Variáveis locais não tem valores de inicialização padrão, você precisa definir explicitamente o valor delas; •  Se você não definir explicitamente o valor, a variável não vai poder ser utilizada;
  • 29. Exemplo de variáveis locais public static void main(String[] args) { int x; System.out.println( x ); //erro de compilação int z = 20; System.out.println(z); }
  • 30. Exercício  -­‐  1   •  Implemente  um  objeto  pessoa  que  tenha  nome  e  data  de   nascimento  como  propriedades  e  um  método  getIdade()  que   retorne  a  idade  atual  da  pessoa  através  do  cálculo  da  data  de   nascimento  pela  data  atual.   •  Dicas:   •  Lembre-­‐se  que  a  data  de  nascimento  pode  ser  antes  ou  depois  da   data  atual  no  ano  atual,  então  subs7tuir  os  anos  não  funciona;   •  Cálculos  de  dadas  em  Java  são  sempre  feitos  através  da  classe   java.u7l.Calendar  
  • 31. Exercício - 2 •  O sistema deve definir duas contas bancárias; •  O sistema deve fornecer ao usuário na linha de comando as opções de depositar ou sacar das contas, além de transferir dinheiro entre as duas; •  O sistema deve avisar ao usuário quando ele tentar sacar ou transferir mais dinheiro do que há na conta; •  O sistema deve ter uma opçao para “fechar” (o usuário não deve fechar o sistema “no braço”);
  • 32. Dicas de implementação •  Um switch pode ser uma boa escolha para definir o que o cliente quer fazer; •  Todos os dados das contas devem ficar nos seus respectivos objetos conta; •  Scanners são a forma mais fácil de ler da linha de comando;