JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

129
JAVA • Linguagem • Ambiente de Desenvolvimento • Runtime ou Java Virtual Machine

Transcript of JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Page 1: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

JAVA

• Linguagem

• Ambiente de Desenvolvimento

• Runtime ou Java Virtual Machine

Page 2: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

JAVA

Page 3: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Características

• Parecida com C++

• Compilada

• Portável

• Orientada a objetos

• Segura

• Suporte a concorrência

• Suporte a sistemas distribuídos

Page 4: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Máquina Virtual

• Máquina emulada em software

• Java Specification Language

• Bytecodes

• JVM provê: conjunto de instruções, conjunto de registradores, formato dos bytecodes, gerenciamento automático de memória.

Page 5: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Ambiente de Runtime

Page 6: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Programa Simples

1 //Exemplo de comentario2 public class AloMundo {3 public static void main (String args[ ]) {4 System.out.println("Alo Mundo!");5 }6 }

Page 7: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1 //Exemplo de comentario2 public class AloMundo {3 public static void main (String args[ ]) {4 System.out.println("Alo Mundo!");5 }6 }

Abra uma janela DOS na pasta do arquivo AloMundo.java. Compile com o javac AloMundo.java e execute com java AloMundo.

Page 8: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes e Pacotes

• Classe é um termo para um módulo que possui funcionalidade

• O Java possui várias classes que implementam diversas funções

• Pacote é um grupo de classes relacionadas

Pacote java.lang

String Math Integer Thread

Page 9: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Documentação JAVA API

• Em HTML e descreve:– Hierarquia da classe– Propósito geral– Lista resumida de variáveis, construtores e

métodos– Lista detalhada com descrição de variáveis,

contrutores e métodos

Page 10: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Declaração

• Uma linha de código terminada com ;

x=5*i;

if (x<50) resposta = "i é menor que 10";

for (int z=0;z<10;z++) a[z] = z;

Page 11: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Bloco

• Um grupo de declarações entre {}

x=5*i;

if (x<50) {

resposta = "i é menor que 10";

}

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

a[z] = z;

System.out.println(z);

}

Page 12: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Identificadores

• São nomes utilizados para identificar classes, variáveis e métodos

1 //Exemplo de comentario2 public class AloMundo {3 public static void main (String args[ ]) {4 System.out.println("Alo Mundo!");5 }6 }

Page 13: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Tipos Básicos

• boolean verdade = true;

• String texto = "aeiou";

• char letra = ‘a’;

• int idade = 31;

• long premio = 200000;

• float peso = 80.5

• double distancia = 1200.34

Page 14: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Convenções de código

• Classe: ContaBancaria, Curso

• Interface: Conta

• Métodos: saque(), adicioneCurso

• Variável: clienteAtual

• Constantes: VELOCIDADE_MAXIMA

• Use {} nas estruturas de controle

• Espaçamento

Page 15: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Variáveis

• Tipos primitivos

• Tipos de referência

• Locais: dentro de métodos

• Atributos ou variáveis membro: dentro da classe

Page 16: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Inicializando variáveis

• Nenhuma variável pode ser utilizada antes de ser inicializada.

• Variáveis locais devem ser inicializadas manualmente.

• Variáveis membro são iniciadas automaticamente.

Page 17: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Operadores

• + -

• * / %

• == != !(expressão lógica)

• && ||

• < > <= >=

• (expressão lógica) ? valor1:valor2

Page 18: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Concatenação de Strings

• O operador + concatena Strings, criando uma nova String

String saudacao = "Dr. ";String nome = "Pedro " + "Silva";String titulo = saudacao + nome;

Page 19: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Casting

• int d

• long a

• a = d; // faz uma conversão implícita

• d = (int) (a); // precisa conversão explícita

Page 20: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Instruções Condicionais

• Comando if

if (nota > 7 && falta < 18) {aprovado=true;

} else {aprovado=false;

}

Page 21: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Instruções Condicionais

switch (valor) {case 1:

instruções;break;

case 2:instruções;break;

default:instruções;break;

}

• Comando switch

Page 22: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Instruções de Loop

• Permite a execução repetida de blocos

for (int i=0; i<10; i++) {instrução ou bloco;

}

Page 23: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Loop

// testa antes de executarwhile (boolean) {

instrução ou bloco;}

// executa pelo menos uma vezdo {

instrução ou bloco;} while (boolean test);

Page 24: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Controles Especiais

• break ou break com rótulo

• continue ou continue com rótulo

Page 25: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1. Crie um aplicação chamada Fatorial que imprima o fatorial de um numero. Para pedir um numero: int n = Integer.parseInt(JOptionPane.showInputMessage("digite um numero"));

2. Faça um programa que peça um número ao usuário. O programa deve dizer se o número é par ou impar. Se o número for par, o programa deve mostrar os números pares menores.

3. Faça um programa que peça um número ao usuário e diga se é um número primo. Números primos são divisíveis apenas por 1 e pelo próprio número.

Page 26: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

4. Escreva o método main da classe Tabuada que imprime os valores multiplos de m menores que n. O usuário deve informar os valores de m e n. O valor de n deve ser maior que m. Por exemplo: Quais são os múltiplos de 2 (m) ate 8 (n)? Resposta: 0, 2, 4, 6

5. Escreva uma classe chamada AreaDoTrianguloRetangulo. Peça para o usuário digitar os valores da base e da altura do triângulo e mostre o valor da área e da hipotenusa. A área do triângulo é igual a base * altura / 2. A hipotenusa é igual a raiz quadrada da soma dos quadrados da base e altura (catetos). Dica: use a função Math.sqrt(n) para calcular a raiz.

Page 27: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Criando uma classe

• Definir um tipo que representa uma data

class MinhaData {int dia;int mes;int ano;

}

• Declarando uma variável deste tipo

MinhaData meuNascimento, seuNascimento;

Page 28: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Criando um objeto

• Objetos são criados com a função new

MinhaData meuNascimento;meuNascimento = new MinhaData( );

• As variáveis que referenciam objetos servem para acessar sua estrutura

meuNascimento.dia = 26;meuNascimento.mes = 11;meuNascimento.ano = 1960;

Page 29: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1. Um ponto pode ser caracterizado por uma coordenada x e y. Defina uma classe chamada Ponto que representa esta idéia. As coordenadas são valores inteiros.

2. Escreva uma classe Main com o método main ( ) dentro da classe; declare duas variáveis do tipo Ponto. Chame as variáveis de inicio e fim. Crie os objetos usando new Ponto( ). Atribua o valor 10 a x e y do objeto inicio. Mostre seus valores do objeto inicio. Atribua o valor 20 para a variável x do objeto fim, e o valor 30 para y do objeto fim. Mostre os valores x e y do objeto fim.

Page 30: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Arrays

• Um array é uma coleção de variáveis do mesmo tipo.

• A coleção é acessada por índices

• Arrays podem ser de qualquer tipo primitivo ou classe

char s[]; ou char[] s;

Ponto p[]; ou Ponto[] p;

Page 31: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Criando Arrays

• Arrays são criados com a função new

s = new char[20];p = new Ponto[100];

• Arrays de objetos não criam os objetos automaticamente. Os objetos são criados separadamente.

p[0] = new Ponto();p[1] = new Ponto();

Page 32: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Inicializando Arrays

Ponto array[] = {new Ponto(),new Ponto(),new Ponto()

}; // equivalente ao código abaixo

Ponto array[] = new Ponto[3];array[0] = new Ponto();array[1] = new Ponto();array[2] = new Ponto();

Page 33: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Arrays Multi-dimensionais

int twoDim [ ] [ ] = new int [4][ ];// arrays de mesmo tamanhotwoDim[0] = new int [5];twoDim[l] = new int [5];// ou arrays de tamanhos diferentestwoDim[0] = new int [2];twoDim[1] = new int [4];twoDim[2] = new int [6];twoDim[3] = new int [8];

Page 34: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Tamanho e redimensionamento

• O tamanho de um array está no seu attributo length

• Você não pode alterar o tamanho de um array, mas pode usar a mesma variável para criar um novo e maior array.

Page 35: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Copiando Arrays

• Use o método arrayCopy da classe System

int dados[ ] = { 1, 2, 3, 4, 5, 6 };int contagem[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};System.arraycopy(dados, 0, contagem, 0, dados.length);

Page 36: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício1. Crie uma classe chamada Media. No método main,

declare uma variável chamada notas do tipo array de int para 5 notas. Após o usuário informar as notas, o programa deve calcular e mostrar a média.

2. Faça uma classe para perguntar 5 questões ao usuário. As perguntas devem ser definidas como um array de String. As respostas devem ser salvas em um array de Strings também. Ao final das perguntas o programa deve mostrar as perguntas e respostas.

Page 37: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes e Objetos

• Princípios dos Objetos– Organizar dados e algoritmos– Encapsulamento– Polimorfismo– Herança

Page 38: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes e Objetos

• O elemento fundamental em Java é a classe

• Classe é um modelo para criar objetos

• Define a implementação dos métodos

• Todos os métodos tem que pertencer a uma classe

• As variáveis definidas na classe são chamadas membros (atributos)

Page 39: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exemplo

class EmpregadoInfo {String nome;String cargo;String departamento;

}

Para instanciar um objeto, crie e atribua valores aos membros:

EmpregadoInfo emp = new EmpregadoInfo( );emp.nome = "Marcos"; emp.cargo = "gerente";emp.departamento = "RH";

Page 40: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Métodos

• Método mostra() implementado na classe EmpregadoInfo

class EmpregadoInfo { String nome; String cargo; String departamento;  void mostra( ) {

System.out.println(nome + " é " +cargo + " do " + departamento);

}}

Page 41: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Executando métodos

Este método imprime os dados dos membros da classe quando o objeto foi criado e instanciado.

EmpregadoInfo empregado = new EmpregadoInfo( );emp.nome = "Marcos"; emp.cargo = "gerente";emp.departamento = "RH";empregado.mostra( );

A idéia que métodos compõe um objeto e podem interagir intimamente com seus dados é um conceito de orientação a objeto.

Page 42: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Definindo métodos

• Contém o código que manipula o estado do objeto

• Recebe um número de parâmetros

• Possue um tipo de retorno

• Sintaxe:<modificador> <tipo_retorno> <nome> ([<parâmetros>])

[throws <exception>] { .... }

Page 43: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exemplos de métodospublic class SalarioEmpregado {

private double salario;public void aumentaSalario (double valor){

salario = salario + valor;}public double calculaImposto() {

double imposto = 0;if (salario > 1200) {

imposto = salario * 0.15;} else if (salario > 2900) {

imposto = salario * 0.27;}return imposto;

}} // fim da classe

Page 44: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Passagem por valor

• Toda passagem de argumentos é por valor, ou seja, uma cópia vai para o método chamado.

• Quando o argumento é um objeto, o valor do argumento é uma referência ao objeto. O método pode mudar o conteúdo do objeto, mas nunca a referência.

Page 45: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Referência this

• this é uma referência ao objeto corrente• this acessa todas as variáveis membro e métodos

do objeto corrente• this é utilizado quando outro objeto precisa

conhecer o objeto corrente

Page 46: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exemplo usando this

public class MinhaData { int dia, mes, ano; public void convidaAniversario( ) { Aniversario.envieConvite( this ); }}public class Aniversario {

public static void envieConvite ( MinhaData d ) { System.out.print( "Convido para meu aniversario " ); System.out.print( " será dia " + d.dia ); System.out.print( " mes " + d.mes ); System.out.print( " ano " + d.ano );

}}

Page 47: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Ocultando Dados

public class Data { private int dia, mes, ano;} public class OutraClasse { public static void main(String args[ ]) { Data d = new Data( ); d.dia = 21; // ilegal! }}

Page 48: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Encapsulamento

• Protege os dados de um objeto de modificação imprópria, forçando o usuário a ter acesso aos dados por um método.

• Assegura que os dados sempre sejam tratados da mesma forma.

Page 49: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrecarregando Métodos

• Cada método possui uma assinatura.• A assinatura é composta pelo:

– Nome do método– Número e tipo de seus argumentos

• Permite escrever vários métodos com o mesmo nome em uma classe que fazem o mesmo trabalho, mas recebem argumentos diferentes.

Page 50: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrecarregando Métodos

public void println(int i) public void println(float f) public void println( )

Page 51: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1. Crie uma classe chamada Lampada com um atributo boleano para indicar se ela está acesa ou apagada. Defina um método para ligar, um para apagar e outro para mostrar o estado da lampada. No método main crie um objeto para classe Lampada, ligue a lampada e mostre seu estado.

2. Crie uma classe chamada ContaBancaria.java que represente atributos e operações de uma conta bancária. A conta deve ter os atributos cliente (String), número (int), saldo (double) e especial (boolean). A conta deve ter as operações depósito e saque. A operação depósito só pode aceitar valores positivos. A operação saque só pode aceitar valores menores que o saldo, mas se a conta for especial ela pode aceitar valores menores que o saldo mais 1000 reais.

Page 52: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercícios

3. Crie uma classe chamada Terminal que no método main faça o seguinte: criar um objeto para classe ContaBancaria, definir valores para seus atributos, depositar 2000 reais, sacar 1200 reais, mostrar o saldo, sacar 1000 reais, definir como conta especial, sacar 1000 reais novamente e mostrar o saldo.

Page 53: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Construindo e Inicializando Objetos

• Utilizar a função new NomeDaClasse()

• O que acontece?– Aloca espaço em memória para o objeto– Inicializa as variáveis da classe– Executa o construtor

Page 54: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Construindo e Inicializando Objetos

Page 55: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Construtores

• Métodos especiais

• Possuem o mesmo nome que a classe

• Recebem ou não argumentos

• Não possuem tipo de retorno

• Os argumentos são fornecidos entre os parenteses que seguem o nome da classe

• Toda classe tem um construtor

Page 56: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exemplo de Construtores

public class Empregado { private String nome; private int salario;  public Empregado(String n, int s) { nome = n; salario = s; } public Empregado(String n) { this(n, 0); } public Empregado( ) { this("Não definido"); }}

Page 57: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Usando diferentes construtores

Empregado objeto1 = new Empregado("Pedro",1500);

Empregado objeto2 = new Empregado("Paulo");

Empregado objeto3 = new Empregado();

Page 58: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Pacotes

• Pacote são grupos de classes relacionadas

• Use a declaração de pacote package para relacionar a classe a um pacote

• Use a declaração de importação import para indicar ao compilador onde achar as classes

Page 59: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício1. Redefina a classe Lampada com um construtor que cria uma lampada

no estado aceso (boleano igual a true).2. Redefina a classe Lampada no pacote auto.eletrico. 3. Escreva a classe Carro no pacote auto com 2 atributos do tipo

Lampada: um chamado farolEsquerdo e outro farolDireito. Defina métodos na classe Carro para acender e apagar os faróis e um método chamado mostra() que mostra se os faróis estão acesos ou não. No método main crie um objeto para classe Carro, execute o método que acende os faróis e execute o método mostra(). Compile e execute a classe Carro. Onde está a classe Carro e a classe Lâmpada em relação a pasta raiz?

Page 60: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

O que é Herança?

• A partir de um modelo de uma classe criar uma versão especializada do modelo.

• Por exemplo, você tem um modelo para classe Empregado e quer criar um modelo para Gerente. O Gerente é um Empregado com características adicionais.

Page 61: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Modelo da Classe Empregado

public class Empregado { String nome; Date admissao; Date nascimento;}

Page 62: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Modelo da Classe Gerente

public class Gerente { String nome; Date admissao; Date nascimento; String cargo; int nivel; String departamento; Empregado surbordinados[ ];}

Page 63: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

A palavra chave Extends

public class Empregado { String nome; Date admissao; Date nascimento;}

public class Gerente extends Empregado { String cargo; int nivel; String departamento; Empregado surbordinados[ ];}

Page 64: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Herança

• Se Gerente estende a classe Empregado, ele tem todas as variáveis e métodos da classe Empregado.

• Qualquer operação válida para Empregado também é válida para Gerente

Page 65: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Herança Simples

• Java permite estender somente uma classe

• Herança simples torna o código menos confuso

• Você pode ter vários níveis na hierarquia

• Construtores não são herdados

Page 66: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Polimorfismo

• Criar uma classe a partir de outra com herança permite o polimorfismo do objeto, ou seja, manipular o objeto por classes diferentes.

• Um objeto tem só uma forma, mas pode ser referenciado pelas superclasses.

• Em Java a classe Object é a classe pai para todas as outras classes

Page 67: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Polimorfismo

Object geral;geral = new String("texto");geral = new Empregado(); Isso é possível, pois Empregado é uma subclasse de Object. public class Empregado extends Object public class Gerente extends Empregado Java permite referênciar um objeto com uma variável que é um dos tipos da classe pai. Empregado teste = new Gerente( );

Page 68: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Coleções Heterogêneas

Empregado equipe[ ] = new Empregado [1024];equipe[0] = new Gerente( );equipe[l] = new Empregado( );

Page 69: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Polimorfismo de Argumentos

// na classe Empregadopublic Imposto calculaImposto(Empregado e) { //calcula e retorna a faixa de imposto} // em outra classeGerente objeto = new Gerente( );Imposto ir = calculaImposto (objeto);

Page 70: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Operador instanceof

• Esta função permite verificar se um objeto é um instância de determidada classe.

public void method(Empregado emp) { if (emp instanceof Gerente) { // traz o salário } else if (emp instanceof Contratado) { // traz o valor da horas } else { // empregado normal }}

Page 71: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Convertendo Objetos

public void method(Empregado emp) { if (emp instanceof Gerente) { Gerente objeto = (Gerente)emp; System.out.println("This is the Gerente of " + objeto.departamento); } // resto da operação}

Page 72: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrescrevendo Métodos

• Permite redefinir o comportamento de um método herdado da classe pai

• Deve ter a mesma assinatura do método na classe pai

Page 73: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrescrevendo Métodospublic class Empregado { String nome; int salario;  public String getDetalhes( ) { return "Nome: " + nome + "\n" + "Salario: " + salario; }} public class Gerente extends Empregado { String departamento;  public String getDetalhes( ) { return "Nome: " + nome + "\n" + "Gerente de " + departamento; }}

Page 74: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrescrevendo Métodos

Empregado objetoEmpregado = new Empregado( );Gerente objetoGerente = new Gerente( ); Ao invocar objetoEmpregado.getDetalhes( ) e objetoGerente.getDetalhes ( ), eles executarão, respectivamente, o método getDetalhes( ) da classe Empregado e getDetalhes ( ) da classe Gerente.

Page 75: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrescrevendo Métodos

Empregado objeto = new Gerente( );objeto.getDetalhes ( )  o método a ser chamado será o da classe Gerente, pois você apenas criou uma variável do tipo Empregado, mas o objeto é um Gerente.

Page 76: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Regras para Sobrescrever

• Tipo de retorno deve ser igual ao pai

• Não pode ser menos acessível que o pai

• Não pode lançar exceções diferentes

Page 77: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Sobrescrevendo Métodos

public class Pai { public void metodo ( ) { }} public class Filho extends Pai { private void metodo ( ) { // ilegal }}

Page 78: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Referência super

• Está disponível em todos os métodos não-estáticos e construtores.

• É uma referência ao objeto pelo modelo da superclasse.

• A execução de super.metodo() utiliza a implementação do método na superclasse.

Page 79: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

super

public class Gerente extends Empregado { private String departamento;  public String getDetalhes( ) { // chama metodo da superclasse return super.getDetalhes( ) + “ Departamento: " + departamento; }}

Page 80: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Construtores da classe Pai

• Você pode construir parte ou todo objeto pelo modelo da classe pai.

• Invoque o construtor da classe pai com super na primeira linha do construtor da classe filho.

Page 81: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Construtor da classe Pai

public class Empregado { String nome;  public Empregado(String n) { nome = n; }} public class Gerente extends Empregado { String departamento; public Gerente(String s, String d) { super( s ); departamento = d; }}

Page 82: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1. 1. Redefina a abstração de uma conta corrente em duas classes: ContaSimples e ContaEspecial. A classe ContaSimples tem os atributos cliente, número e saldo. As operações são: public void deposito(double valor), public void saque(double valor), public boolean temSaldo(double valor) e public void mostraSaldo(). A classe ContaEspecial, além de ser uma conta simples, tem um limite que é uma variável do tipo double. A operação temSaldo da ContaEspecial deve levar em conta este limite.

2. Faça uma classe chamada GerenciaConta, e no método main teste as classes ContaSimples e ContaEspecial.

Page 83: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Características da Linguagem

• Variáveis, métodos e código estáticos

• Orientado a objetos

• Classes, métodos e variáveis final

• Classes abstratas e interfaces

• Controle de acesso

• Classes internas e wrappers (envelopes)

Page 84: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Variáveis Estáticas

• Variáveis compartilhadas entre todas as instâncias de uma classe

• É semelhante a uma variável global em outras linguagens

• Se a variável não for private, ela pode ser acessada pelo nome da classe: NomeDaClasse.nomeDaVariavel

Page 85: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Variáveis Estáticas

public class CEP { public static final int R_XV = 89200; public static final int R_AMERICA = 89201;} public class Correio { public void metodo( ) { int x = CEP.R_XV; }}

Page 86: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Métodos Estáticos

public class Quadrado { public static int calculaArea(int x, int y) { return x * y; }} public class Grafico { public static void main( String[] a) { int a = 9; int b = 10; int c = Quadrado.calculaArea(a, b); System.out.println("Area é igual a " + c); }}

Page 87: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Código Estático

• Uma classe pode conter blocos de código estático.

• Este código executa apenas uma vez quando a classe é carregada.

• Se houver mais que um bloco estático, eles são executados na ordem que aparecem na classe.

Page 88: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercícios

1. Defina uma classe chamada Matemática com dois métodos estáticos: um método chamado maior(int x, int y) que retorna o valor do maior parâmetro e outro método chamado menor(int x, int y).

2. Crie uma classe Compara onde o usuário informa dois valores e o programa mostra o valor maior e o menor usando os métodos da classe Matemática do exercício anterior.

Page 89: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Dados e métodos OO

• Um sistema OO consiste de objetos

• Objetos são criados a partir das classes

• Os atributos são definidos por variáveis

• O comportamento é definido pelos métodos

• Os objetos da mesma classe tem as mesmas características, mas cada objeto é diferente

Page 90: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Orientados a Objetos

public class Carro { String cor; String modelo;  public Carro (String cor, String modelo) { this.cor = cor; this.modelo = modelo; }  public void mostra( ) { System.out.println ("Isto é um " + modelo + cor + "."); }}

Page 91: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Orientados a Objetos

Car vectra = new Car("Branco","Vectra");Car corsa = new Car("Prata","Corsa"); A orientação a objetos é ilustrada pelo fato que ambos os objetos têm dados separados, embora ambos sejam carros.

vectra.mostra( ) imprimirá "Isto é um Vectra Branco."corsa.mostra( ) imprimirá "Isto é um Corsa Prata."

Page 92: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes final

• Um classe final não pode ser extendida

• Não podemos declarar uma subclasse para uma classe final

public final class Caixa {

...

}

public class Caixa2 extends Caixa { //ilegal

Page 93: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Métodos final

• Um método final de uma classe não pode ser sobrescrito nas suas subclasses

• Segurança

• Otimizaçãopublic class Folha {

public final double calculaSalario() {...}

}

public class FolhaModificada extends Folha{

public double calculaSalario(){...}//ilegal

}

Page 94: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Variáveis final

• Uma variável final é uma constante

• Qualquer tentativa de mudar o valor causa erro

public final int CODIGO_BRASIL = 55;

Page 95: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes Abstratas

• Uma classe abstrata define apenas parte da implementação

• Não podemos criar objetos para uma classe abstrata

• Deixamos as subclasses fornecerem a implementação que falta da classe abstrata

Page 96: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes Abstratas

public abstract class PecaXadrez { public abstract boolean movimentoValido(int x, int y); public void move(int x, int y) {

if (movimentoValido(x,y)) {// faz movimento

} else {// erro

} }}

A classe PecaXadrez declara a existência do método movimentoValido mas não o implementa.

Page 97: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes Abstratas

Subclasses de classes abstratas têm que implementar todos os métodos abstratos declarados na classe pai. Caso contrário elas também serão classes abstratas.  public class Rainha extends PecaXadrez { public boolean movimentoValido(int x, int y){ // faz consistência do movimento para a Rainha }}public class Rei extends PecaXadrez { public boolean movimentoValido(int x, int y){ // faz consistência do movimento para o Rei }}

Page 98: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercícios

1. Defina uma classe Conta com os métodos saque e deposito (iguais ao da classe Conta Simples) e um método abstrato chamado boolean temSaldo(double valor). Redefina a classe ContaSimples com relacionamento de herança com a classe Conta. Implemente o código do método temSaldo na classe ContaSimples.

Page 99: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Interfaces

• Uma interface não tem implementação, todos os métodos são abstratos.

• Uma interface pode definir variáveis estáticas do tipo final (constantes)

public interface Cor {  public int getCor( ); public void setCor(int cor);}

Page 100: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Múltiplas Interfaces

• A classe pode estender apenas uma classe, mas implementar múltiplas interfaces

Page 101: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Interfaces

• A classe que implementa uma interface deve definir os métodos da interface

interface ObjetoSeguro { void abre(int segredo );} class Cofre implements ObjetoSeguro { void abre(int segredo ) { if (segredo == 1234) { System.out.println("Cofre Aberto"); } }}

Page 102: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercícios

1. Defina uma interface chamada Bancaria, tendo três métodos: deposito, saque e mostraSaldo.

2. Redefina a classe, Conta.java, usando a interface Bancaria para definir tipos de contas diferentes.

Page 103: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Controle de Acesso

• Java tem quatro níveis de acesso:– public– protected– Default (quando é omitido)– private

Page 104: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Controle de Acesso

Page 105: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Comparação

• Operador == compara tipos primitivos

• O método equals compara objetos

Page 106: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

toString

• O método toString() faz parte de todos os objetos em java por ser um método da classe Object

• Sobrescrevendo o comportamento deste método podemos definir uma representação de um objeto como uma String

Page 107: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

toString

class Ponto { int x, y; public String toString() { return "Ponto(" + x + "," + y + ")"; }}

Page 108: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes Internas

• Uma classe interna é uma definição de classe dentro de outra classe

• Defina uma classe como classe interna se ela não tem utilidade fora da classe que a contém.

Page 109: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Classes Wrappers

• Uma classe wrapper é uma representação de um tipo primitivo como um objeto

• Cada tipo primitivo possui seu wrapper

• Wrapper são úteis se você trabalha com classes e métodos que só aceitam objetos como argumentos

Page 110: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Wrappers

int pInt = 500;Integer wInt = new Integer(pInt);int p2 = wInt.IntValue( );

Page 111: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1. Crie uma classe chamada SistemaSolar. No SistemaSolar crie a classe interna chamada Planeta com os atributos nome e distanciaDoSol. Defina um array de Planeta para o SistemaSolar. No construtor de SistemaSolar defina objetos para o array. Crie o método mostrePlanetas para o SistemaSolar. No método main crie um objeto da classe SistemaSolar e chame o método mostrePlanetas.

Page 112: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exceções

• Mecanismo para tratar os erros durante a execução do programa.

• Exceções são classes que representam erros durante a execução de um programa java.

• Os objetos que representam as exceções podem ser “lançados”, capturados e manipulados.

Page 113: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Condições de Erro

• Tentar abrir um arquivo que não existe

• Tentar usar uma conexão de rede interrompida

• Tentar acessar posição de arrays fora da faixa

• Tentar carregar uma classe que não está no classpath

Page 114: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exemplopublic class Semaforo { public static void main (String args[ ]) { int i = 0; String semaforo [ ] = {"Verde", "Amarelo","Vermelho"}; while (i < 4) { System.out.println (sinais[i]); i++; } }}Ao executar o resultado éjava SemaforoVerdeAmareloVermelhojava.lang.ArrayIndexOutOfBoundsException: 3at Semaforo.main(Semaforo.java:12)

Page 115: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Instruções try e catch

Conta c = new Conta();try {

c.saque(100);} catch (EstouroSaqueException e) { System.out.println("Erro: " + e.getMessage() );}c.mostraSaldo();

Page 116: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Aplicando o try/catch

public class Semaforo { public static void main (String args[ ]) { int i = 0; String semaforo [ ] = {"Verde",

"Amarelo","Vermelho"}; while (i < 4) { try { System.out.println (sinais[i]); catch (Exception e) { break; } i++; } }}

Page 117: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Instrução finallyA instrução finally define um bloco de código que sempre será executado, mesmo que uma exceção seja lançada ou não:boolean transacaoOk = false;try { abreTransacao( ); debito.saque ( valor ); credito.deposito( valor ); transacaoOk = true;} finally { if ( transacaoOk ) fechaTransacao( ); else desfazTransacao( );}

Page 118: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Instrução throw e clausula throws

public void deposito(double valor) throws DepositoInvalidoException {

if (valor > 0) { saldo = saldo + valor;

} else { throw new DepositoInvalidoException("Este valor é invalido para depósito: " + valor);

}}

Page 119: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Categorias de Exceção

• Throwable– Error– Exception

• RuntimeException

Page 120: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Tratar ou lançar?

• O tratamento de exceções pode ser de 2 modos:

• Tratar dentro do próprio método usando try,catch e finally

• Lançar para quem chamou o método onde a exceção foi gerada usando a clausula throws

Page 121: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Criando Exceções

public class DepositoInvalidoException extends Exception {

public DepositoInvalidoException (String motivo) { // chama construtor da classe pai

super(motivo); }

}

Page 122: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercício

1.Crie as seguintes exceções no pacote erros: a. EstouroSaqueException - Acontece quando é feita

uma tentativa de tirar mais dinheiro do que a conta possui.

b. DepositoInvalidoException – Acontece quando uma quantia inválida de dinheiro (quantia < zero) é depositada. 2.Reescreva as operações de saque e depósito para lançar estas exceções.

Page 123: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Calendário e Datas

• A classe java.util.Date representa uma data e a classe java.util.Calendar representa um calendário para trabalhar com as datas.

• Date hoje = new Date();

• Calendar c = Calendar.getInstance();

Page 124: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Formatando Datas

• Para formatar datas em java use a classe java.text.SimpleDateFormat. Esta classe possui dois métodos básicos: parse(String) para converter um texto em uma data e format(Date) para formatar a data em um texto. Por exemplo:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");

String texto = sdf.format(new Date());Date dia = sdf.parse("16/06/1971 23:00");

Page 125: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Calculando Datas

• A classe Calendar permite a definição de data com o método set e o cálculo de datas com o método add(int, int). Por exemplo:

Page 126: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Coleções

• O java tem um framework de coleções que inclui listas, conjuntos e mapas. As operações básicas ao usar as coleções são:– adicionar objetos– remover objetos– verificar se existe um objeto– recuperar um objeto– percorrer os objetos um a um

Page 127: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Principais Interfaces

• As coleções se dividem em três categorias básicas:

• Listas: Listas de objetos

• Set: Conjuntos de objetos únicos

• Maps: Objetos com uma identificação única

• Coleções Ordered e Sorted

Page 128: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Principais Métodos

• List: add(Object value), get(int i)

• Set: add(Object value), contains(Object)

• Map: put(Object key, Object value) e get(Object key)

Page 129: JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Exercícios

1. Crie uma classe chamada Agenda que guarde o nome e o telefone de pessoas como objetos String em um HashMap, adicione 5 nomes e telefones e depois mostre o telefone de uma das pessoas.

2. Cria uma classe chamada Equipes para armazenar nomes de equipes em um ArrayList. O programa deve pedir para o usuário digitar os nomes das equipes até o usuário digitar "fim". O programa então mostra os nomes das equipes digitados pelo usuário.