JAVA

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

description

JAVA. Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine. JAVA. Características. Parecida com C++ Compilada Portável Orientada a objetos Segura Suporte a concorrência Suporte a sistemas distribuídos. Máquina Virtual. Máquina emulada em software - PowerPoint PPT Presentation

Transcript of JAVA

Page 1: JAVA

JAVA

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

Page 2: JAVA

JAVA

Page 3: JAVA

Características

• Parecida com C++• Compilada• Portável• Orientada a objetos• Segura• Suporte a concorrência• Suporte a sistemas distribuídos

Page 4: JAVA

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

Ambiente de Runtime

Page 6: JAVA

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

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

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

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

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

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

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

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

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

Variáveis

• Tipos primitivos• Tipos de referência• Locais: dentro de métodos• Atributos ou variáveis membro: dentro da

classe

Page 16: JAVA

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

Operadores

• + -• * / %• == != !(expressão lógica)• && ||• < > <= >=• (expressão lógica) ? valor1:valor2

Page 18: JAVA

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

Casting

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

Page 20: JAVA

Instruções Condicionais

• Comando if

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

} else {aprovado=false;

}

Page 21: JAVA

Instruções Condicionais

switch (valor) {case 1:

instruções;break;

case 2:instruções;break;

default:instruções;break;

}

• Comando switch

Page 22: JAVA

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

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

Controles Especiais

• break ou break com rótulo• continue ou continue com rótulo

Page 25: JAVA

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

Exercício4. 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

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

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

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

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 classechar s[]; ou char[] s;Ponto p[]; ou Ponto[] p;

Page 31: JAVA

Criando Arrays

• Arrays são criados com a função news = 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

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

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

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

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

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

Classes e Objetos

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

Page 38: JAVA

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

Exemploclass 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

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

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

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

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

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

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

Exemplo usando thispublic 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

Ocultando Dadospublic 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

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

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

Sobrecarregando Métodos

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

Page 51: JAVA

Exercício1. 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

Exercícios3. 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

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

Construindo e Inicializando Objetos

Page 55: JAVA

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

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

Usando diferentes construtores

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

Empregado objeto2 = new Empregado("Paulo");

Empregado objeto3 = new Empregado();

Page 58: JAVA

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

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

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

Modelo da Classe Empregado

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

Page 62: JAVA

Modelo da Classe Gerente

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

Page 63: JAVA

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

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

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

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

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

Coleções Heterogêneas

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

Page 69: JAVA

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

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

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

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

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

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

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

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

Sobrescrevendo Métodos

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

Page 78: JAVA

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

super

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

Page 80: JAVA

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

Construtor da classe Paipublic 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

Exercício1. 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Classes AbstratasSubclasses 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

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

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

Múltiplas Interfaces

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

Page 101: JAVA

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

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

Controle de Acesso

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

Page 104: JAVA

Controle de Acesso

Page 105: JAVA

Comparação

• Operador == compara tipos primitivos• O método equals compara objetos

Page 106: JAVA

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

toString

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

Page 108: JAVA

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

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

Wrappers

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

Page 111: JAVA

Exercício1. 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

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

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

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

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

Aplicando o try/catchpublic 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

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

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

Categorias de Exceção

• Throwable– Error– Exception

• RuntimeException

Page 120: JAVA

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

Criando Exceções

public class DepositoInvalidoException extends Exception {

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

super(motivo); }

}

Page 122: JAVA

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

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

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

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

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

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

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

Exercícios1. 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.