A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN 013149020 © 2005."— Transcrição da apresentação:

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

2 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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

3 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Sobrecarga e construtores Sobrecarga (overloading) Construtores

4 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

5 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo - Sobrecarga public 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() ); } }

6 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

7 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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. –Exemplo public 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

8 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

9 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo - Construtores public class Data { private int dia=1, mes=1, ano= 2005; public Data(){ } // Construtor sem parâmetros public 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");... } }

10 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

11 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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ância Data d = new Data(); d.Data( 2005, 12, 25 ); // inválido d.set( 2005, 12, 25 ); // válido

12 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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

13 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo de desenho Top-Down Classe 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++; }

14 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo de desenho Top-Down Classe Data: Métodos auxiliares para o cálculo do dia seguinte public class Data { int dia, mes, ano; /** * Indica se determinado ano é bissexto ano 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 m mês 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; } }

15 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

16 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

17 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

18 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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(); } }

19 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

20 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Evitar problemas – 1ª solução public 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

21 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Evitar problemas – 2ª solução public 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(); } }

22 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

23 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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 );

24 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo - métodos estáticos public 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 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() ); } }

25 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

26 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo - métodos da classe

27 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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 classe public static final double PI = ; 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.

28 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo - variáveis estáticas

29 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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);

30 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

31 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Classes wrapper tipo primitivoclasse método para extracção intIntegerintValue longLonglongValue floatFloatfloatValue doubleDoubledoubleValue charCharactercharValue No Java 5.0 existe empacotamento (boxing) automático Integer n = 42; é equivalente a Integer n = new Integer(42); Similarmente, o desempacotamento (unboxing) int i = n; é equivalente a int i = n.intValue();

32 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

33 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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 = " "; 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)

34 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Constantes As classes wrapper também contêm constantes úteis classe constantes. IntegerInteger.MAX_VALUE, Integer.MIN_VALUE DoubleDouble.MAX_VALUE, Double.MIN_VALUE

35 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Métodos estáticos da classe Character

36 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Exemplo – uso da classe Integer public 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() ); } }

37 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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;

38 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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;

39 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.

40 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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;.

41 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005 Pearson Education Nome de package e directorias –Exemplo para o package general.utilities

42 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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 ).

43 Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 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.


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

Apresentações semelhantes


Anúncios Google