Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouHelena Batista Alterado mais de 11 anos atrás
1
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 7 – Métodos avançados Capitulo 7 Métodos avançados
2
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 2 Capitulo 7 – Métodos avançados Parâmetros formais e actuais Parâmetros formais(implícitos + explícitos): class BankAccount { public void deposit(double amount) { balance += amount; }... } Parâmetros actuais(argumentos): harrysChecking.deposit(allowance - 200)
3
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 3 Capitulo 7 – Métodos avançados Passagem de parâmetros
4
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 4 Capitulo 7 – Métodos avançados Parâmetros de objecto public void transfer(BankAccount other, double amount) { withdraw(amount); other.deposit(amount); } Chamada com uma referencia a um objecto e um parâmetro numérico: double allowance = 800; momsSavings.transfer(harrysChecking, allowance);
5
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 5 Capitulo 7 – Métodos avançados Referencia a objecto e parametro numerico
6
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 6 Capitulo 7 – Métodos avançados Métodos para alteração e para acesso Acesso: não altera o estado de um parâmetro implícito (ex.. getBalance ) Alteração: altera o estado de um parâmetro implícito (ex.. deposit ) Classe Inalterável: Todos os métodos são unicamente para acesso (ex.. String )
7
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 7 Capitulo 7 – Métodos avançados O que se entende por efeitos colaterais Qualquer alteração fora do parâmetro implícito P.e: modificação de outro parâmetro fora do objecto (ex.. transfer ) P.e: imprimir dentro do método: public void deposit(double amount) { – if (amount < 0) JOptionPane.showInputDialog("Bad value");... }
8
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 8 Capitulo 7 – Métodos avançados Minimizar os efeitos colaterais Excelente: Sem modificações ( getBalance ) Bom: métodos para alterações que apenas alteram parâmetros implicídos ( deposit ) Regular: Métodos que alteram parâmetros explícitos ( transfer ) Miserável: Métodos com outros efeitos colaterais (alterar variáveis estáticas, enviar para o écran)
9
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 9 Capitulo 7 – Métodos avançados Métodos estáticos Métodos sem parâmetros implícitos Não actuam num objecto Exemplo típico: quando todos os parâmetros são números: x e y são aproximadamente iguais se |x - y| max(|x|, |y|) public static boolean approxEqual (double x, double y) { return Math.abs(x - y) <= EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
10
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 10 Capitulo 7 – Métodos avançados Métodos estáticos Em Java, todos os métodos devem pertencer a uma classe class Numeric { public static boolean approxEqual(double x, double y) {... } } A chamada á feita através do nome da classe: if (Numeric.approxEqual(a, b))...
11
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 11 Capitulo 7 – Métodos avançados Não é possível modificar parâmetros numéricos public static void updateBalance (double balance, double interestRate) { double interest = balance * interestRate / 100; balance = balance + interest; } Não resulta: double savings = 10000; double rate = 5; updateBalance(savings, rate);
12
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 12 Capitulo 7 – Métodos avançados Um método não pode modificar parâmetros numericos
13
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 13 Capitulo 7 – Métodos avançados É possível modificar o estado do parâmetro de um objecto public static void updateBalance (BankAccount account, double interestRate) { double interest = account.getBalance() * interestRate / 100; account.deposit(interest); } BankAccount collegeFund = new BankAccount(10000); double rate = 5; updateBalance(collegeFund, rate);
14
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 14 Capitulo 7 – Métodos avançados Um método pode modificar o estado do parametro de um objecto
15
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 15 Capitulo 7 – Métodos avançados Não é possível modificar o conteúdo do objecto passado como parâmetro public static chooseAccount(BankAccount betterAccount, BankAccount candidate1, BankAccount candidate2) { if (candidate1.getBalance() > candidate2.getBalance()) betterAccount = candidate1; else betterAccount = candidate2; } BankAccount collegeFund = new BankAccount(10000); BankAccount momsSavings = new BankAccount(8000); BankAccount myAccount = null; // não resulta!! chooseAccount(myAccount,momsSavings,collegeFund);
16
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 16 Capitulo 7 – Métodos avançados Um método não pode substituir um parametro objecto
17
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 17 Capitulo 7 – Métodos avançados Variáveis estáticas Uma variável por classe, e não por objecto Exemplo: última conta bancaria atribuída propriedade da classe e não do objecto public class BankAccount {... private double balance; private int accountNumber; private static int lastAssignedNumber; }
18
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 18 Capitulo 7 – Métodos avançados Variáveis estáticas public BankAccount() { lastAssignedNumber++; accountNumber = lastAssignedNumber; } Inicialização de variáveis estáticas: class BankAccount {... private static int lastAssignedNumber = 0; } Constantes estáticas: Math.PI
19
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 19 Capitulo 7 – Métodos avançados Atributos e variaveis estáticas
20
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 20 Capitulo 7 – Métodos avançados Tipos de variáveis Atributos Variáveis estáticas Variáveis locais Parâmetros
21
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 21 Capitulo 7 – Métodos avançados Escopo Escopo da classe definido na classe(atributos ou variáveis estáticas) Escopo do bloco definido no bloco(variável local) Shadowing//esconder uma variável com escopo superior class BankAccount { public BankAccount(double initialBal) { double balance = initialBal; } private double balance; }
22
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 22 Capitulo 7 – Métodos avançados Como comentar os métodos /** Tests whether two floating-point numbers are equal except for roundoff @param x a floating-point number @param y a floating-point number @return true if x and y are approximately equal */ public static boolean approxEqual(double x, double y) {... }
23
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 23 Capitulo 7 – Métodos avançados Comentários às classes /** A class that stores the position and speed of a simulated cannon ball */ public class CannonBall {... } Ferramenta de extração de comentários: javadoc MyProg.java
24
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 24 Capitulo 7 – Métodos avançados Página HTML produzida pela javadoc
25
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 25 Capitulo 7 – Métodos avançados Pré-condições O que deve um método fazer quando é chamado com parâmetros incorrectos? Math.sqrt(-1); account.deposit(-1000); Não fazer nada? Acabar o programa? Retornar uma mensagem de erro?
26
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 26 Capitulo 7 – Métodos avançados Pré-condições Condição pré estabelecida: @param amount the amount of money to deposit; must be > 0 Lançar uma excepção se uma das pré condições for violada: if (amount <= 0) throw new IllegalArgumentException(); Quem executa é responsável: executa os métodos com parâmetros que preencham todos os pré requisitos Responsabilidade do programador: Apenas computa resultados acertados quando os parâmetros preencherem as pré-condições
27
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 27 Capitulo 7 – Métodos avançados Recursividade n! = 1 2 3... n 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120
28
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 28 Capitulo 7 – Métodos avançados Recursividade Não existem operações... mágicas: public static int factorial(int n) { return 1 * 2 * 3 *... * n; } Não foi assim que chegamos ao resultado da tabela Foi usado n! = (n - 1)! n public static int factorial(int n) { return factorial(n - 1) * n; } Quase certomas a recursividade tem que terminar...
29
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 29 Capitulo 7 – Métodos avançados Recursividade Toda a recursividade tem que simplificar a computação de alguma forma Devem existir casos especiais para efectuar computações simples factorial(4) calls factorial(3) factorial(3) calls factorial(2) factorial(2) calls factorial(1) factorial(1) calls factorial(0) factorial(0) returns 1 factorial(1) returns 1 * 1 = 1 factorial(2) returns 1 * 2 = 2 factorial(3) returns 2 * 3 = 6 factorial(4) returns 6 * 4 = 24
30
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 30 Capitulo 7 – Métodos avançados Program Fac.java public class Fac { public String getFactorial(int n) { return(n + "! = + factorial(n)); }
31
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 31 Capitulo 7 – Métodos avançados /** Computes the factorial of an integer. @param n an integer >= 0 @return n! */ public static int factorial(int n) { if (n == 0) { return 1; } else { int result = n * factorial(n - 1); return result; }
32
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 32 Capitulo 7 – Métodos avançados Towers of Hanoi
Apresentações semelhantes
© 2025 SlidePlayer.com.br Inc.
All rights reserved.