43
Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education Mais sobre Objectos e métodos Capítulo 5

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Embed Size (px)

Citation preview

Page 1: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Mais sobre Objectos e métodos

Capítulo 5

Page 2: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Objectivos

• Aprender a sobrecarga de métodos• Saber definir e usar construtores• Aprender técnicas de desenho top-down• Aprender técnicas para testar os métodos

(incluindo o uso de stubs e programas de teste)• Saber definir e usar métodos e variáveis

estáticas• Saber construir packages e usar a instrução import

Page 3: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Sobrecarga e construtores

• Sobrecarga (overloading)

• Construtores

Page 4: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Sobrecarga (overloading)• Dois ou mais métodos da mesma classe podem ser

definidos com o mesmo nome se a lista de parâmetros usada servir para determinar qual o método que está a ser invocado (e.g. println).

– Isto é denominado sobrecarga (overloading).

– O número de argumentos e o tipo dos argumentos determina qual o método invocado.

• Se não existir nenhum, são tentadas conversões simples de tipo. Caso não exista possibilidade de conversão, será produzida um mensagem de erro.

• A sobrecarga pode ser aplicada a métodos estáticos e de instância.

Page 5: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo - Sobrecargapublic class Pessoa {

String nome; int idade;public String getNome() { return nome; } public int getIdade() { return idade; } public void set( String n ) { nome = n; } public void set( int i ) { if ( i > 0) idade = i; }public void set( String n, int i ) { set(n);set(i); }public String toString() {

return getNome()+ " – "+ getIdade()+ " anos"; }}

public class TestePessoa {public static void main( String [] args ) { Pessoa p = new Pessoa(); p.set("Ana"); p.set(12); System.out.println( p.toString() ); p.set("Rita", 9); System.out.println( p.toString() ); }

}

Page 6: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Sobrecarga e tipo de retorno

• Não é possível sobrecarregar um nome de método providenciando duas definições com cabeçalhos que apenas diferem no tipo de retorno.

Page 7: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

• Sobrecarga e conversão automática podem interferir uma na outra.

• Dependendo como a sobrecarga e a conversão de tipo interactuarem, pode ficar ambíguo qual o método a invocar. Como as ambiguidades não são permitidas o compilador Java produz uma mensagem de erro.

– Exemplopublic static void oops(double n1, int n2){…}

public static void oops(int n1, double n2){…}

A invocação:sample.oops(5,10)

produz uma mensagem de erro na compilação.

Sobrecarga e Conversão Automática

Page 8: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Construtores• Quando se cria um objecto duma classe, por vezes é necessário

efectuar acções que coloquem valores iniciais nas variáveis de instância.

• O construtor é um método especial que permite realizar as acções de iniciação.

• Novos objectos são criados usando o operador new

Nome_Class nome_Object = new Nome_Class(parametros);

• O construtor é chamado automaticamente quando é criado um objecto.– new Nome_Class( parametros ) invoca o construtor e retorna a

referência para o objecto instanciado.

– Define o estado inicial de um objecto (tipicamente corresponde à iniciação das variáveis de instância.

Page 9: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo - Construtorespublic class Data {

private int dia=1, mes=1, ano= 2005;public Data(){ } // Construtor sem parâmetrospublic Data( int a, int m, int d){ set(a, m, d); }public Data( String d ) { set(d); }...

}

public class TesteData {public static void main( String [] args ) { Data d= new Data(); Data natal= new Date(2005, 12, 25); Data anos= new Data("1996/10/23"); ... }

}

Page 10: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Definição dos Construtores• Cada construtor tem o mesmo nome que a classe.

• O construtor não tem tipo de retorno, nem mesmo void.

• Construtores frequentemente são sobrecarregados, cada um com diferente número de parâmetros ou diferentes tipos de parâmetros.

• Quando na definição da classe não existem definições de construtores, é criado automaticamente um construtor por omissão (default), que não tem parâmetros.

• Se for definido pelo menos um construtor para a classe, não é criado automaticamente o construtor sem parâmetros.

Page 11: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Uso de Construtores

• O construtor só pode ser invocado quando se cria um objecto. Data natal = new Data(2005, 12, 25); // válido

• Depois dum objecto ser criado, os métodos set são necessários para modificar o valor de uma ou mais variáveis de instânciaData d = new Data();

d.Data( 2005, 12, 25 ); // inválidod.set( 2005, 12, 25 ); // válido

Page 12: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Desenho Top-Down• Para realizar uma tarefa complexa é conveniente decompo-la

em várias tarefas.

• Cada tarefa pequena (sub-tarefa) pode, se necessário, ser decomposta em tarefas ainda mais pequenas.

• As várias tarefas pequenas frequentemente são mais fáceis de codificar do que uma tarefa grande.

• A colecção de tarefas pequenas trabalham em conjunto de forma a realizar uma tarefa grande.

• Tipicamente, sub-tarefas são auxiliares, isto é, são implementadas como métodos private.

• Esta técnica é denominada desenho top-down ou “dividir para conquistar”

Page 13: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo de desenho Top-DownClasse Data: Métodos publico que avança para o próximo dia public class Data {

int dia, mes, ano;

……………

/** * passa a data para o dia seguinte */public void diaSeguinte() { dia++; if (dia > diasNoMes(mes, ano)) {

dia=1;mes++;if (mes > 12) { mes=1; ano++;}

}}

}

Page 14: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo de desenho Top-DownClasse Data: Métodos auxiliares para o cálculo do dia seguintepublic class Data {

int dia, mes, ano;

/** * Indica se determinado ano é bissexto * @param ano * @return true se ano for bissexto */private boolean bissexto(int ano) { return (ano %4 == 0 && ano % 100 != 0) || ano % 400 == 0;}

/** * Indica o número de dias do mês “m" no ano “a” * @param m mês * @return número de dias do mês m */private int diasNoMes(int m, int a) { switch (m) {

case 4: case 6: case 9: case 11: return 30;case 2: return bissexto(a) ? 29 : 28;default: return 31;

}}

...........}

Page 15: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Teste bottom-up

• Para teste de um método ou de uma classe deve-se escrever um programa de teste específico que permita testar cada um dos métodos fora do contexto da aplicação em que vão ser usados.

• Um programa de teste :

– Trabalha e invoca testando cada um dos métodos individualmente.

– Depois do método ou classe estar testado adequadamente, o programa de teste pode ser deitado fora.

• Se o método A usa o método B, então o método B tem que ser testado antes de testar o método A.

• Testando todos os métodos de “nível inferior” invocados pelo método do “nível superior” antes do teste do método “nível superior” é denominado teste bottom-up.

Page 16: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Stubs• Às vezes uma aproximação geral tem que ser

testada antes de escrever todos os métodos.

• Um stub é uma versão simplificada do método que é suficientemente boa para o teste do objectivo, apesar de não ser suficientemente boa como definição final.

– Pode, por exemplo, retornar um valor arbitral, desde que seja suficiente para o teste aproximado.

Page 17: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Information Hiding - revisitada• A classe pode ter variáveis de instância de

qualquer tipo, incluindo tipos classe.

• Variáveis de instância de tipos classe contêm o endereço em memória do objecto associado.

• Qualquer modificação feita na variável de instância de tipos classe, por vezes não intencional, indirectamente afecta todas as outras referências do objecto associado.

Page 18: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Variáveis de instância do tipo classe

public class Pessoa {private Data nascimento; private String nome;Pessoa(String n, int a, int m, int d)

{ nome = n; nascimento = new Data(a, m, d); }public String getNome() { return nome; }public Data getData() { return nascimento;}public void escrever(){

System.out.print("Nome: " + nome);System.out.println(" nasceu em:" +

nascimento.toString());}

}public class TestePessoa {

public static void main( String [] args ) { Pessoa p = new Pessoa("Ana", 1993, 1, 6); p.escrever(); Data d = p.getData(); d.set(2005,1,6); // Altera a data de nascimento da Ana p.escrever();}

}

Page 19: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Evitar problemas• Uma solução fácil é usar unicamente variáveis instância

do tipo primitivo ou do tipo String, que não tem métodos que possibilitem modificar os dados.

• Uma solução mais dura é produzir uma cópia exacta do objecto chamada um clone.– A referência para o clone é retornada como alternativa da

referência para o objecto.

– Apêndice 8 do livro para detalhes.

• Outra solução é definir métodos que permitam o acesso aos dados sem que estes possam ser modificados.

Page 20: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Evitar problemas – 1ª soluçãopublic class Data {

...public Data clone() { return new Data(ano, mes, dia); }

}

public class Pessoa {...public Data getData(){ return nascimento.clone();}

}

public class TestePessoa {

public static void main( String [] args ) {

Pessoa p= new Pessoa("Ana", 1993, 1, 6); p.escrever(); Data d = p.getData();

d.setAno(2005); // Não altera a data de nascimento da Ana

p.escrever();}

}

Retorna uma nova data

Page 21: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Evitar problemas – 2ª soluçãopublic class Data {

...public int getDia(){ return dia;}

public int getMes(){ return mes;}

public int getAno(){ return ano;}

}

public class Pessoa {...public String getDataNasc(){ return nascimento.toString();}

public int getDia(){ return nascimento.getDia();}

public int getMes(){ return nascimento.getMes();}

public int getAno(){ return nascimento.getAno();}

}

public class TestePessoa {

public static void main( String [] args ) {

Pessoa p= new Pessoa("Ana", 1993, 1, 6); p.escrever(); System.out.println("Nasceu no ano: ", p.getAno() ); Data d = new Data( p.getAno(), p.getMes(), p.getDia() ); d.setAno(2005); p.escrever();}

}

Page 22: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Métodos e variáveis da classe (estáticas)

• Métodos da classe

• Variáveis da classe

• Classe Math

• Integer, Double, e outras Classes Wrapper

• Métodos estáticos e variáveis estáticas pertencem a uma classe e não requerem qualquer objecto.

Page 23: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Métodos estáticos

• Alguns métodos não têm ligação a qualquer objecto. Por exemplo:– Calcular a raiz quadrada de um número

– Converter uma letra minúscula em maiúscula

– Gerar um número aleatório (random)

• Estes métodos podem ser definidos como estáticos.

• Um método estático é definido como qualquer método da classe, mas inclui a keyword static no cabeçalho.

public static double areaCirculo(double raio);

• Na definição não se pode referir ao this, aceder a variáveis de instância, nem invocar métodos da classe não estáticos.

• Um método estático é invocado usando o nome da classe em vez do nome de variável de tipo classe.

Nome_classe.nome_método_static( parametros );

Page 24: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo - métodos estáticospublic class Data {

private int dia, mes, ano;static public boolean anoBissexto(int a) { return a % 400 == 0 || a%4 == 0 && a%100 != 0; }static public int numDiasMes(int a, int m) { switch ( m ) { case 2: return anoBissexto(a) ? 29 : 28; ...}static public boolean validaMes(int m){return m>=1 && m <= 12;}static public boolean validaData(int a, int m, int d) { return a>0 && validaMes(m) && d>=1 && d<=numDiasMes(a, m);}public void set(int a, int m, int d) { if ( validaData(a, m, d) ) { ano=a; mes = m; dia = d);}

}

public class TesteData {public static void main( String [] args ) { Data natal= new Date(); natal.set(2005, 12, 25); System.out.print( "Natal: " + natal.toString() ); }

}

Page 25: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Usar um objecto para invocar um método estático

• Um objecto da classe pode ser usado para invocar um método estático da classe se bem que seja mais comum usar o nome da classe para invocar um método estático.

• Pode-se invocar um método não estático dentro dum método estático desde que se crie o objecto para invocar o método não estático.

Page 26: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo - métodos da classe

Page 27: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Variáveis da classe • Uma classe pode ter variáveis e constantes

estáticas. Variáveis estáticas também são denominadas variáveis da classepublic static final double PI = 3.14159;public static int numberOfInvocations = 0;

• O valor da variável estática pode ser modificada por qualquer método que tenha acesso à variável.

• Tal como as variáveis de instância, as variáveis estáticas geralmente são declaradas como private.– Qualquer objecto da classe pode ter acesso às variáveis

estáticas se forem disponibilizados os métodos de acesso e modificação public.

Page 28: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo - variáveis estáticas

Page 29: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

A classe Math

• A classe predefinida Math providencia vários métodos matemáticos standard.– Todos os métodos são estáticos.– Não é necessário criar objectos para

invocar os métodos da classe Math.– Estes métodos são invocados usando o

nome da classe (Math) seguida do operador ponto e do nome do método. valor = Math.nome_método(parâmetros);

Page 30: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Classes wrapper (empacotadoras)• Por vezes um valor do tipo primitivo necessita

de ser passado como argumento, mas na definição do método este recebe um objecto no correspondente parâmetro formal.

• As classes wrapper Java convertem o valor do tipo primitivo para o correspondente tipo de classe.Integer n = new Integer(42);

– a variável de instância do objecto n tem o valor 42.

Page 31: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Classes wrapper• tipo primitivoclasse método para extracção

int Integer intValue

long Long longValue

float Float floatValue

double Double doubleValue

char Character charValue

• No Java 5.0 existe empacotamento (boxing) automáticoInteger n = 42;

é equivalente aInteger n = new Integer(42);

• Similarmente, o desempacotamento (unboxing)int i = n;

é equivalente a int i = n.intValue();

Page 32: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Empacotamento e desempacotamento automático

• O empacotamento e o desempacotamento automático também pode ser usado na passagem de parâmetros.– Um argumento do tipo primitivo pode ter

como correspondente parâmetro formal a correspondente classe wrapper.

– Um argumento do tipo classe wrapper pode ter como correspondente parâmetro formal o correspondente tipo primitivo.

Page 33: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Métodos de conversão• Existem métodos estáticos nas classes wrapper que permitem

converter de String para o correspondente número do tipo int, long, float, ou double.retorna método de conversão exemplo . int parseInt Integer.parseInt("42")

long parseLong Long.parseLong("42")float parseFloat Float.parseFloat("199.98")double parseDouble Double.parseDouble("199.98")

– Se a string tem espaços iniciais e finais String stringValor = " 199.98 ";

double valor =Double.parseDouble(stringValor.trim());

• As classes wrapper contêm o método estático toString que permite converter para String o correspondente número do tipo int, long, float, ou double. Integer.toString("42") Long.toString(42) Float.toString(199.98) Double.toString(199.98)

Page 34: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Constantes

• As classes wrapper também contêm constantes úteis

• classe constantes . Integer Integer.MAX_VALUE, Integer.MIN_VALUEDouble Double.MAX_VALUE, Double.MIN_VALUE

Page 35: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Métodos estáticos da classe Character

Page 36: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Exemplo – uso da classe Integerpublic class Data {

...public void set(int a, int m, int d) { if ( validaData(a, m, d) ) { ano= a; mes = m; dia = d; } }

public void set( String s ) { int p2, p1 = s.indexOf("/”); if (p1 != -1) { if ( (p2= s.indexOf(p1+1, "/")) != -1) {

set( Integer.parseInt( s.substring(0, p1) ),

Integer.parseInt( s.substring(p1+1, p2) ),

Integer.parseInt( s.substring(p2+1) ) ); } }}

}

public class TesteData {

public static void main( String [] args ) {

Data d1 = new Data(); d1.set(1993, 1, 6); System.out.println( d1.toString() ); d1.set("1996/10/23");System.out.println( d1.toString() ); }

}

Page 37: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Packages• Um package agrupa e dá um nome a uma colecção de classes que

têm algum relacionamento.

– Pode servir como uma biblioteca (library) de classes para um programa.

– A colecção de classes tem que existir na mesma directoria.

• A definição de cada classe de um package continua a ter que ser colocada em ficheiros separados, com o mesmo nome da classe, numa directoria com o nome do package.

• Em cada ficheiro, antes da definição da classe tem que constar

package Nome_Package;

• Exemplo

package utilitarios;

Page 38: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Packages :Colisão (clash) de nomes• Os packages podem ajudar a resolver a colisão

de nomes, situação que acontece quando duas classes têm o mesmo nome.

– A ambiguidade pode ser resolvida usando o nome do package.

– Exemplo

meuTipo.NomeClass object1;

teuTipo.NomeClass object2;

Page 39: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Packages: Directorias

• Directorias são denominadas pastas, ou arquivos (folders) em alguns sistemas operativos.

• Para entender os packages, é necessário saber sobre path names (caminhos), directorias, e é necessário saber como o sistema operativo usa a variável de ambiente path.

• Isto são tópicos de sistemas operativos e o seu detalhe depende do sistema operativo .

Page 40: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Nomes de package e directorias• O nome do package comunica ao compilador onde procurar as

classes do package.– Isto é, fornece ao compilador o path name da directoria que

contém as classes do package.• Para procurar a directoria, o Java necessita

– do nome do package– do valor da variável de ambiente classpath.

• O valor da variável de ambiente classpath informa o Java onde começar a procura do package (path name da directoria base).

• A variável de ambiente classpath permite mais do que uma directoria base, tipicamente separadas por ponto e virgula:– \javastuff\libraries;f:\morejavastuff

• Quando se actualiza ou modifica a variável classpath , inclui-se a directoria corrente como uma das alternativas.Tipicamente, a directoria corrente é assinalada como um ponto: – \javastuff\libraries;f:\morejavastuff;.

Page 41: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Nome de package e directorias– Exemplo para o package general.utilities

Page 42: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Instrução import• Na definição de uma classe pode-se usar

todas as classes de um package colocando a instrução import apropriada no início do ficheiro que contém a definição da classe:

import Nome_package.*;

• Só é necessário se a definição da classe não está na mesma directoria (a classe não pertence ao mesmo package).

Page 43: Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005

Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª EdiçãoAutor: Walter Savitch, ISBN 013149020 © 2005 Pearson Education

Sumário• Aprenderam mais técnicas de programação com

classes e objectos.

• Aprenderam a definir métodos construtores.

• Aprenderam acerca da técnica de desenho top-down.

• Aprenderam técnicas para teste de métodos (incluindo o uso de programas de teste e métodos stub).

• Aprenderam acerca de métodos e variáveis estáticos.

• Aprenderam acerca de packages e da instrução import.